Home >Database >Mysql Tutorial >sql中查询重复记录与删除重复记录

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

WBOY
WBOYOriginal
2016-06-07 17:49:311118browse

在数据库中经常会出现一些重复记录,我有时想查询重复记录显示出来,也有时想删除重复记录,下面我来介绍如何删除与查询重复记录的方法吧。

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)

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn