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,列 E 和 F 不相关,因此 第 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 id
和on ... 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 - 查找和删除重复项[重复]的主要内容,如果未能解决你的问题,请参考以下文章