sql中查询重复记录与删除重复记录

作者:袖梨 2022-06-29

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)

相关文章

精彩推荐