有相關ID標識一.查找重復記錄1.查找所有重復記錄Select*From表Where重復字段In(Select重復字段From表GroupBy重復字段HavingCount(*)>1)SELECT*FROMCompanyEmailcWHERE((SELECTCOUNT(*)FROMCompanyEmailWHEREEmail=a.Email)>1)ORDERBYEmailDESC查出相同orderid中創建時間最晚的記錄selectt.IdfromG" />

日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

SQL server 經驗分享(五)重復記錄的查詢與刪除

系統 2145 0

<一> 有相關ID標識

一.查找重復記錄

1.查找所有重復記錄

      Select * From 表 Where 重復字段 In (Select 重復字段 From 表 Group By 重復字段 Having Count(*)>1)
 
SELECT *
FROM CompanyEmail c
WHERE ((SELECT COUNT(*)
FROM CompanyEmail  
WHERE Email= a.Email) > 1)
ORDER BY Email DESC
    

? ?查出相同orderid中創建時間最晚的記錄

      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.過濾重復記錄(只顯示一條ID最大的)

      Select * From CompanyEmail  Where ID In (Select Max(ID) From CompanyEmail  Group By Email)
    

??

二.刪除重復記錄

?

1.刪除全部重復記錄(慎用)?

      Delete 表 Where 重復字段 In (Select 重復字段 From 表 Group By 重復字段 Having Count(*)>1)
    

??

2.保留一條,刪除其他重復記錄

      Delete CompanyEmail Where ID Not In (Select Max(ID) From CompanyEmail Group By Email)
    

??

3. 刪除多字段相同的重復記錄,保留一條

      delete CompanyEmail where ID not in (select max(ID) from CompanyEmail group by Email, Company)
    

??

?

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)
    

??

?<二>沒有相關ID標識

這種情況可以使用Row_Number() Over 來實現重復記錄的查詢和刪除:

原表:

SQL?server?經驗分享(五)重復記錄的查詢與刪除
查詢重復記錄:

      Select Row_Number(),* Over(Partition By userName,userPwd order By userName) From [Temp].[dbo].[User];

    

?結果:

SQL?server?經驗分享(五)重復記錄的查詢與刪除
?刪除重復記錄:

      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;
    

?結果:

SQL?server?經驗分享(五)重復記錄的查詢與刪除
?三.根據兩個字段查重復

我想查詢表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是要查詢的重復字段
    

?

SQL?server?經驗分享(五)重復記錄的查詢與刪除


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 白城市| 巴南区| 舒城县| 台南市| 万州区| 连山| 土默特右旗| 宾川县| 保定市| 静乐县| 武冈市| 东乌珠穆沁旗| 兴文县| 龙岩市| 永平县| 新郑市| 虞城县| 白银市| 清原| 忻城县| 当雄县| 甘德县| 绵竹市| 喀喇沁旗| 云霄县| 澄迈县| 松原市| 资兴市| 太白县| 余江县| 曲沃县| 八宿县| 武乡县| 顺昌县| 南乐县| 余姚市| 本溪市| 荔波县| 阿城市| 武清区| 阳江市|