您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

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

2024/3/3 6:41:41发布16次查看
在数据库中经常会出现一些重复记录,我有时想查询重复记录显示出来,也有时想删除重复记录,下面我来介绍如何删除与查询重复记录的方法吧。
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)
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product