我知道我可以在下面运行以下查询来查找基于多列的“重复”行,执行如下操作:
SELECT PosId, OrgId
FROM PosOrg
GROUP BY PosId, OrgId
HAVING COUNT(*) > 1
但现在我想删除重复的行,所以上面的查询以返回零行结束。我不在乎我删除了哪一行(只要基于这两列的唯一性只剩下一行。
在 SQL 中删除这些重复项的正确方法是什么?
我知道我可以在下面运行以下查询来查找基于多列的“重复”行,执行如下操作:
SELECT PosId, OrgId
FROM PosOrg
GROUP BY PosId, OrgId
HAVING COUNT(*) > 1
但现在我想删除重复的行,所以上面的查询以返回零行结束。我不在乎我删除了哪一行(只要基于这两列的唯一性只剩下一行。
在 SQL 中删除这些重复项的正确方法是什么?
如果您有另一个独特的id
列,您可以这样做
delete from PosOrg
where id not in
(
SELECT min(id)
FROM PosOrg
GROUP BY PosId, OrgId
)
;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