【问题标题】:How to delete duplicate records in SQL? [duplicate]如何删除 SQL 中的重复记录? [复制]
【发布时间】:2019-10-07 05:39:55
【问题描述】:

这是我原来的表:

目标表:

我无法在表格中添加新列。

【问题讨论】:

  • 你如何决定哪些是“好人”,哪些是“坏人”?
  • 我认为这里的主要问题源于没有主键。
  • SQL Server 问题需要显示尝试

标签: sql sql-server


【解决方案1】:

您可以使用ROW_NUMBER():删除重复项:

with duplicates as
(
    select
        *
        ,ROW_NUMBER() OVER (PARTITION BY FirstName, LastName, age ORDER BY FirstName) AS number
    from yourTable
)
delete 
from duplicates
where number > 1

number 大于 1 的每一行都是重复的。

【讨论】:

  • 小心,您没有按Age 进行分区,而需要删除真正的重复项
【解决方案2】:

您可以使用公用表表达式删除一组重复项中除第一条记录之外的所有记录:

with cte as (
    select *, row_number()
     over (partition by FirstName, LastName, Age order by FirstName, LastName, Age) as row_number
    from tbl
)
delete from cte where row_number <> 1

【讨论】:

    【解决方案3】:

    在没有 PK 的情况下,您需要某种方法来识别行。

    我能想到的唯一方法是:

    1. 检索行的“行 ID”,
    2. 然后为每个非唯一行选择一个作为“好”,
    3. 最后删除所有其他的。

    不过,我对这个解决方案并不乐观。我认为this answer 可以帮助生成独特的行ID。希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2020-03-31
      • 2016-01-07
      • 2020-07-16
      • 2021-02-13
      • 2010-10-24
      • 2017-02-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多