你真的会玩SQL吗?删除重复数据且只保留一条

时间:2022-04-23
本文章向大家介绍你真的会玩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

此处用到了临时表