MySQL中查询、删除重复记录的方法大全
前言
本文主要给大家介绍了关于mysql中查询、删除重复记录的方法,分享出来供大家参考学习,下面来看看详细的介绍:
查找所有重复标题的记录:
select title,count(*) as count from user_table group by title having count>1;
select * from t_info a where ((select count(*) from t_info where title = a.title) > 1) order by title desc
一、查找重复记录
1、查找全部重复记录
select * from t_info a where ((select count(*) from t_info where title = a.title) > 1) order by title desc
2、过滤重复记录(只显示一条)
select * from hzt where id in (select max(id) from hzt group by title)
注:此处显示id最大一条记录
二、删除重复记录
1、删除全部重复记录(慎用)
delete 表 where 重复字段 in (select 重复字段 from 表 group by 重复字段 having count(*)>1)
2、保留一条(这个应该是大多数人所需要的 ^_^)
delete hzt where id not in (select max(id) from hzt group by title)
注:此处保留id最大一条记录
三、举例
1、查找表中多余的重复记录,重复记录是根据单个字段(peopleid)来判断
select * from people where peopleid in (select peopleid from people group by peopleid having count(peopleid) > 1)
2、删除表中多余的重复记录,重复记录是根据单个字段(peopleid)来判断,只留有rowid最小的记录
delete from people where peopleid in (select peopleid from people group by peopleid having count(peopleid) > 1) and rowid not in (select min(rowid) from people group by peopleid having count(peopleid )>1)
3、查找表中多余的重复记录(多个字段)
select * from vitae a where (a.peopleid,a.seq) in (select peopleid,seq from vitae group by peopleid,seq having count(*) > 1)
4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录
delete from vitae a where (a.peopleid,a.seq) in (select peopleid,seq from vitae group by peopleid,seq having count(*) > 1) and rowid not in (select min(rowid) from vitae group by peopleid,seq having count(*)>1)
5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录
select * from vitae a where (a.peopleid,a.seq) in (select peopleid,seq from vitae group by peopleid,seq having count(*) > 1) and rowid not in (select min(rowid) from vitae group by peopleid,seq having count(*)>1)
四、补充
有两个以上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如name字段重复,而其他字段不一定重复或都重复可以忽略。
1、对于第一种重复,比较容易解决,使用
select distinct * from tablename
就可以得到无重复记录的结果集。
如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除
select distinct * into #tmp from tablename drop table tablename select * into tablename from #tmp drop table #tmp
发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。
2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下
假设有重复的字段为name,address,要求得到这两个字段唯一的结果集
select identity(int,1,1) as autoid, * into #tmp from tablename select min(autoid) as autoid into #tmp2 from #tmp group by name,autoid select * from #tmp where autoid in(select autoid from #tmp2)
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
上一篇: Stream 深入,并行数据
下一篇: 连狗的东西你都抢,你还是不是人啊
推荐阅读
-
SqlServer2005中使用row_number()在一个查询中删除重复记录的方法
-
MySQL中(JOIN/ORDER BY)语句的查询过程及优化方法
-
PHP使用mysql_fetch_object从查询结果中获取对象集的方法
-
关于mysql中删除重复记录,并保留重复数据中的一条数据的SQL语句的深入理解
-
SQL Server2008中删除重复记录的方法分享
-
Oracle 查找与删除表中重复记录的步骤方法
-
mysql删除重复记录语句的方法
-
MySQL 数据库查询数据,过滤重复数据保留一条数据---(MySQL中的row_number变相实现方法)
-
python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法
-
使用distinct在mysql中查询多条不重复记录值的解决办法