MS SQL - 查找和删除重复项[重复]

Posted

技术标签:

【中文标题】MS SQL - 查找和删除重复项[重复]【英文标题】:MS SQL - find and delete duplicities [duplicate] 【发布时间】: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 是重复的

【问题讨论】:

您可以看看here 和许多其他人。 查看***.com/questions/4510596/… 【参考方案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

【讨论】:

以上是关于MS SQL - 查找和删除重复项[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 MS Access 中查找和删除重复值

几个删除重复记录的SQL语句

Oracle删除重复记录只保留一条数据的几种方法

SQL删除重复数据只保留一条

SQL删除重复数据只保留一条

删除 MS SQL Server 中的列