我知道这个问题很多,但每当我在自己的数据库中尝试其中一个答案时,重复的行就会被删除。从这里的dabatable中删除第2行和第3行的好查询是什么?
这是指向图片的链接(图片上没有足够的信誉点):DataTable image
谢谢!
答案 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
...
)