你真的會玩SQL嗎?刪除重復數據且只保留一條


在網上看過一些解決方法

我在此給出的方法適用於無唯一ID的情形

表:TB_MACVideoAndPicture 字段只有2個:mac,content

mac作為ID,正常情況下mac數據是唯一的,由於操作失誤導致數據插入多次,導致出現多個mac,content重復數據,現在只保留一條,刪除多余的

大體思想是給重復數據一個自增ID,過濾出每組里面最小ID,刪除原數據中所有重復數據再將最小ID插入

 --查詢出所有重復數據,並給定遞增id
 SELECT IDENTITY( INT,1,1 ) AS id ,
        mac ,
        content 
 INTO   #tmp
 FROM   TB_MACVideoAndPicture
 WHERE  mac IN ( SELECT    mac
                  FROM      TB_MACVideoAndPicture
                  GROUP BY  mac ,content
                  HAVING    COUNT(*) > 1 )
 ORDER BY mac ,content
 
 
 --刪除原表中所有重復數據
 DELETE FROM TB_MACVideoAndPicture
 WHERE  mac IN ( SELECT  mac FROM  #tmp )
 
 --插入id最小的重復數據到原表
 INSERT INTO TB_MACVideoAndPicture
        SELECT  UPPER(mac) mac ,
                content 
        FROM    #tmp a
        WHERE   id IN ( SELECT  MIN(id)
                        FROM    #tmp b
                        WHERE   a.mac = b.mac AND a.content = b.content
                        GROUP BY mac ,content )
 

 DROP TABLE #tmp

此處用到了臨時表

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM