<一> 有相關(guān)ID標(biāo)識
一.查找重復(fù)記錄
1.查找所有重復(fù)記錄
Select * From 表 Where 重復(fù)字段 In (Select 重復(fù)字段 From 表 Group By 重復(fù)字段 Having Count(*)>1) SELECT * FROM CompanyEmail c WHERE ((SELECT COUNT(*) FROM CompanyEmail WHERE Email= a.Email) > 1) ORDER BY Email DESC
? ?查出相同orderid中創(chuàng)建時間最晚的記錄
select t.Id from Group_Require t, (select max(CreateTime) x from Group_Require group by OrderId) xx where t.CreateTime=xx.x and t.OrderId=38
?
2.過濾重復(fù)記錄(只顯示一條ID最大的)
Select * From CompanyEmail Where ID In (Select Max(ID) From CompanyEmail Group By Email)
??
二.刪除重復(fù)記錄
?
1.刪除全部重復(fù)記錄(慎用)?
Delete 表 Where 重復(fù)字段 In (Select 重復(fù)字段 From 表 Group By 重復(fù)字段 Having Count(*)>1)
??
2.保留一條,刪除其他重復(fù)記錄
Delete CompanyEmail Where ID Not In (Select Max(ID) From CompanyEmail Group By Email)
??
3. 刪除多字段相同的重復(fù)記錄,保留一條
delete CompanyEmail where ID not in (select max(ID) from CompanyEmail group by Email, Company)
??
?
1、查找表中多余的重復(fù)記錄,重復(fù)記錄是根據(jù)單個字段(peopleId)來判斷
select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
??
2、刪除表中多余的重復(fù)記錄,重復(fù)記錄是根據(jù)單個字段(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、查找表中多余的重復(fù)記錄(多個字段)?
select * from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
?
4、刪除表中多余的重復(fù)記錄(多個字段),只留有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、查找表中多余的重復(fù)記錄(多個字段),不包含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)
??
?<二>沒有相關(guān)ID標(biāo)識
這種情況可以使用Row_Number() Over 來實現(xiàn)重復(fù)記錄的查詢和刪除:
原表:
Select Row_Number(),* Over(Partition By userName,userPwd order By userName) From [Temp].[dbo].[User];
?結(jié)果:
Delete T From (Select Row_Number() Over(Partition By userName,userPwd order By userName) As RowNumber,* From [Temp].[dbo].[User])T Where T.RowNumber > 1;
?結(jié)果:
我想查詢表shiyan003,按xm,sfzhm這兩個字段查
select * from shiyan003 a where exists (select 1 from (select xm, sfzhm from shiyan003 group by xm, sfzhm having count(*) > 1) s where s.xm = a.xm and s.sfzhm = a.sfzhm)
?
select * from 表名 a join (select ID,NAME from 表名 group by ID,NAME having count(*)>1) b on a.ID=b.ID and a.NAME=b.NAME order by a.NAME ,a.ID ID和NAME是要查詢的重復(fù)字段
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
