你真的会玩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

此处用到了临时表

上一篇:MSSQL sql server 2005/2008 row_number()函数应用之–删除表中重复记录,只保留一条不重复数据


下一篇:Oracle删除重复记录只保留一条数据的几种方法