当前位置:首页 > 数据库 > SQL其他

SQL删除、查找重复数据记录等操作

数据库产生重复数据记录是经常发生的事情,现在nowamagic总结下各种重复的情况,每一种情况该如何写sql语句处理。 查找所有重复标题的记录: select *from t_info awhere ((select count(*) from t_info where title = a.title) > 1)order by title desc 查

数据库产生重复数据记录是经常发生的事情,现在nowamagic总结下各种重复的情况,每一种情况该如何写sql语句处理。

查找所有重复标题的记录:

select * from t_info a where ((select count(*) from t_info where title = a.title) > 1) order by title desc

查找全部重复记录:

select * from 表 where 重复字段 in (select 重复字段 from 表 group by 重复字段 having count(*)>1)

过滤重复记录(只显示一条):

select * from hzt where id in (select max(id) from hzt group by title)

注:此处显示id最大一条记录。

删除全部重复记录(慎用):

delete 表 where 重复字段 in (select 重复字段 from 表 group by 重复字段 having count(*)>1)

保留一条(这个应该是大多数人所需要的 ^_^):

delete hzt where id not in (select max(id) from hzt group by title)

注:此处保留id最大一条记录。

查找表中多余的重复记录,重复记录是根据单个字段(peopleid)来判断:

select * from people where peopleid in (select peopleid from people group by peopleid having count(peopleid) > 1)

删除表中多余的重复记录,重复记录是根据单个字段(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)

查找表中多余的重复记录(多个字段):

select * from vitae a where (a.peopleid,a.seq) in (select peopleid,seq from vitae group by peopleid,seq having count(*) > 1)

删除表中多余的重复记录(多个字段),只留有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)

查找表中多余的重复记录(多个字段),不包含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字段重复,而其他字段不一定重复或都重复可以忽略。

对于第一种重复,比较容易解决,使用:

select distinct * from tablename

就可以得到无重复记录的结果集。

如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除:

select distinct * into #tmp from tablename drop table tablename select * into tablename from #tmp drop table #tmp

发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。

第二类重复问题通常要求保留重复记录中的第一条记录,操作方法如下:

假设有重复的字段为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)
【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!

相关教程推荐

其他课程推荐