【问题标题】:MS SQL - find and delete duplicities [duplicate]MS SQL - 查找和删除重复项[重复]
【发布时间】:2012-01-16 14:03:11
【问题描述】:

可能重复:
SQL - How can I remove duplicate rows?
SQL query to delete duplicate rows from same table?

如何在此表中找到例如重复性?

A 是唯一 ID,列 EF 不相关,因此 第 1、2、3 行 并且行 4,5 是重复的

【问题讨论】:

标签: sql sql-server


【解决方案1】:

我有一个更有效的解决方案:

DELETE FROM MyTable 
    WHERE A NOT IN 
        (SELECT MIN(A) 
         FROM MyTable GROUP BY B, C, D
        );

注意:如果“A”不为 NULL,则此方法有效。所以,对于一些类似的任务,它不会有帮助。

【讨论】:

  • 是的,这是一个非常好的解决方案!也谢谢你,Gangnus
【解决方案2】:

试试:

select count(A) Occurrence, B, C, D from TableName group by B, C, D having count(A) > 1

要获取重复列的 ID,请使用:

select A from TableName where (B + ' ' + C + ' ' + D) in (select B + ' ' + C + ' ' + D from TableName group by B, C, D having count(A) > 1)

【讨论】:

    【解决方案3】:
    select MyTable.A 
    from MyTable 
         join (select B,C,D 
               from MyTable 
               group by B,C,D 
               having Count(*)>1) as T2 on MyTable.B = T2.B 
                                           and MyTable.C = T2.C 
                                           and MyTable.D = T2.D
    

    【讨论】:

    • 此查询删除所有记录,但假设删除重复,因此如果某些值在两行中,那么它应该删除一行,而不是所有行,感谢您的时间。
    • @Md. Elias Hossain - 这是一个选择而不是删除。如果要删除重复并保留重复行中的一行,请小心。哪一个必须留在桌子上?我很高兴看到选择,然后手动删除行
    • 那很好,但提问者正在寻找DELETE 声明,我敢肯定他将无法找到他应该在重复行中保留哪一行,但是提问者接受了您的回答,他说没关系,谢谢你的时间。
    • 是的,我已经通过select B, C, D, MIN(X) as idon ... and MyTable.id <> T2.id 对其进行了更新,并且效果很好。谢谢 :) (与下面 Gangnus 的答案完全相同)
    【解决方案4】:

    请尝试以下查询:

    WITH CustomTable
     AS (SELECT  B, C, D, ROW_NUMBER() OVER (PARTITION BY B, C, D 
                                       ORDER BY ( SELECT 0)) RowNumber
         FROM   TableName)
    DELETE FROM CustomTable
    WHERE  RowNumber > 1
    

    【讨论】:

      猜你喜欢
      • 2021-01-08
      • 1970-01-01
      • 1970-01-01
      • 2015-04-23
      • 2019-07-26
      • 2019-12-11
      • 2014-07-03
      • 2016-09-29
      • 1970-01-01
      相关资源
      最近更新 更多