作者:大瑞Y | 来源:互联网 | 2017-05-12 14:55
在数据库中经常会出现一些重复记录,我有时想查询重复记录显示出来,也有时想删除重复记录,下面我来介绍如何删除与查询重复记录的方法吧。
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)
|