sql 查出一张表中重复的所有记录数据

1、一张表中有id和name 两个字段，查询出name重复的所有数据，现在列下：

select * from xi a where (a.username) in  (select username from xi group by username  having count(*) > 1)

2、查询出所有数据进行分组之后，和重复数据的重复次数的查询数据，先列下：

select  count(username) as '重复次数',username from xi group by username  having count(*)>1 order by username desc

3、查询及删除重复记录的方法大全

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)

(二)

Select Name,Count(*) From A Group By Name Having Count(*) > 1

Select Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1

(三)

declare @max integer,@id integer
declare cur_rows cursor local for
select 主字段,count(*) from 表名 group by 主字段 having count(*) >;
open cur_rows fetch cur_rows into @id,@maxwhile @@fetch_status=0
begin
select @max = @max -1
set rowcount @max
delete from 表名 where 主字段 = @id
fetch cur_rows into @id,@maxend
close cur_rows
set rowcount 0

1、对于第一种重复，比较容易解决，使用

select distinct * from tableName

select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp

select identity(int,1,1) as autoID, * into #Tmp from tableName
select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
select * from #Tmp where autoID in(select autoID from #tmp2)

(四)

select * from tablename where id in (select id from tablenamegroup by idhaving count(id) > 1)

posted @ 2019-03-15 12:44  武穆逸仙  阅读(305)  评论(0编辑  收藏