删除SQL Server 2008中的重复行

时间:2014-03-27 10:25:52

标签: sql-server-2008 duplicates

我知道这个问题很多,但每当我在自己的数据库中尝试其中一个答案时,重复的行就会被删除。从这里的dabatable中删除第2行和第3行的好查询是什么?

这是指向图片的链接(图片上没有足够的信誉点):DataTable image

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用ROW_NUMBER的CTE:

WITH CTE AS(
    SELECT t.*,
           rn = ROW_NUMBER() OVER (PARTITION BY Col1, Col2, Col3, Col4, Col5, ...
                                   ORDER BY Col1)
    FROM dbo.TableName t
)
DELETE FROM CTE WHERE RN > 1

这将删除除一个以外的所有重复行。

如果您要删除所有可以使用EXISTS

的内容
DELETE FROM CTE c1
WHERE EXISTS(
    SELECT 1 FROM CTE c2
    WEHRE c2.rn > 1
    AND c1.Col1=c2.Col1
    AND c1.Col2=c2.Col2
    AND c1.Col3=c2.Col3
    AND c1.Col4=c2.Col4
    AND c1.Col5=c2.Col5
    ...
)