我知道我可以在下面运行以下查询来查找"重复"基于多列的行做这样的事情:
SELECT PosId, OrgId
FROM PosOrg
GROUP BY PosId, OrgId
HAVING COUNT(*) > 1
但现在我想删除重复的行,以便上面的查询结束返回零行。我不关心我删除哪一行(只要根据这两列的唯一性,只剩下一行。
在SQL中删除这些重复项的正确方法是什么?
答案 0 :(得分:7)
如果您有其他唯一id
列,则可以
delete from PosOrg
where id not in
(
SELECT min(id)
FROM PosOrg
GROUP BY PosId, OrgId
)
答案 1 :(得分:4)
;WITH CTE
AS (
SELECT PosId
,OrgId
,ROW_NUMBER() OVER (PARTITION BY PosId , OrgId ORDER BY PosId , OrgId) rn
FROM PosOrg
)
DELETE FROM CTE
WHERE rn > 1