5

我知道我可以在下面运行以下查询来查找基于多列的“重复”行,执行如下操作:

SELECT      PosId, OrgId
FROM        PosOrg
GROUP BY    PosId, OrgId
HAVING COUNT(*) > 1

但现在我想删除重复的行,所以上面的查询以返回零行结束。我不在乎我删除了哪一行(只要基于这两列的唯一性只剩下一行。

在 SQL 中删除这些重复项的正确方法是什么?

4

2 回答 2

8

如果您有另一个独特的id列,您可以这样做

delete from PosOrg
where id not in
(
  SELECT      min(id)
  FROM        PosOrg
  GROUP BY    PosId, OrgId
)
于 2014-08-24T23:45:43.817 回答
5
;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
于 2014-08-24T23:50:38.187 回答