【问题标题】:In SQL, how can I delete duplicate rows based on multiple columns?在 SQL 中,如何删除基于多列的重复行?
【发布时间】:2014-08-24 23:42:41
【问题描述】:

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

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

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

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

【问题讨论】:

  • 该表上的其他列是什么?有PK限制吗?

标签: sql sql-server duplicates no-duplicates


【解决方案1】:

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

delete from PosOrg
where id not in
(
  SELECT      min(id)
  FROM        PosOrg
  GROUP BY    PosId, OrgId
)

【讨论】:

  • 我不需要“where > 1”吗?
  • 不,您删除每个组的所有不是min(id) 的记录,即所有重复项
  • @leora 不,如果表上有一个名为 ID 的唯一字段,则不会。无论是否存在这样的字段,您都应该添加到您的问题中。
【解决方案2】:
;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

【讨论】:

    猜你喜欢
    • 2015-07-26
    • 1970-01-01
    • 2020-02-12
    • 2013-06-13
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    • 2015-12-17
    相关资源
    最近更新 更多