时间:2021-07-01 10:21:17 帮助过:44人阅读
在数据库中经常会出现一些重复记录,我有时想查询重复记录显示出来,也有时想删除重复记录,下面我来介绍如何删除与查询重复记录的方法吧。
1。查找全部重复记录
代码如下 | |
Select * From 表 Where 重复字段 In (Select 重复字段 From 表 Group By 重复字段 Having Count(*)>1) |
2。过滤重复记录(只显示一条)
代码如下 | |
Select * From HZT Where ID In (Select Max(ID) From HZT Group By Title) |
注:此处显示ID最大一条记录
SQL Server删除重复行是我们最常见的操作之一,下面就为您介绍六种适合不同情况的SQL Server删除重复行的方法,供您参考。
1.如果有ID字段,就是具有唯一性的字段
代码如下 | |
delect table tableName where id not in ( select max(id) from table group by col1,col2,col3... ) |
group by 子句后跟的字段就是你用来判断重复的条件,如只有col1,那么只要col1字段内容相同即表示记录相同。
2. 如果是判断所有字段也可以这样 ,【对于表中的指定的字段的进行检查是否相同】
代码如下 | |
select * into #temp from tablename group by id1,id2,.... delete tablename insert into table select * from #temp drop table #temp |
3. 首先去重复,再获取N*1条数据插入到临时表中,【对于表中的所有字段的进行检查是否相同】,再将原表的数据删除,然后将临时表的数据插入到原表,最后删除临时表。
代码如下 | |
select distinct * into #temp from tablename delete tablename go insert tablename select * from #temp go drop table #temp
|
4. 没有ID的情况
代码如下 | |
select identity(int,1,1) as id,* into #temp from tabel delect # where id not in ( select max(id) from # group by col1,col2,col3...) delect table inset into table(...) select ..... from #temp |
5. col1+','+col2+','...col5 联合主键
代码如下 | |
select * from table where col1+','+col2+','...col5 in ( select max(col1+','+col2+','...col5) from table where having count(*)>1 group by col1,col2,col3,col4 ) |
group by 子句后跟的字段就是你用来判断重复的条件,如只有col1,那么只要col1字段内容相同即表示记录相同。
6.
代码如下 | |
select identity(int,1,1) as id,* into #temp from tabel select * from #temp where id in ( select max(id) from #emp where having count(*)>1 group by col1,col2,col3...) |
其它方法补充
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) |