如何检测SQ​​L Server表中的重复行?

时间:2008-11-20 20:23:50

标签: sql-server rdbms

检测10列/ 50K行表中重复项的最有效方法是什么?我正在使用MSSQL 8.0

5 个答案:

答案 0 :(得分:55)

显示其他人描述的例子:

SELECT
    Col1, -- All of the columns you want to dedupe on
    Col2, -- which is not neccesarily all of the columns
    Col3, -- in the table
    Col4,
    Col5,
    Col6,
    Col7,
    Col8,
    Col9,
    Col10
FROM
    MyTable
GROUP BY
    Col1,
    Col2,
    Col3,
    Col4,
    Col5,
    Col6,
    Col7,
    Col8,
    Col9,
    Col10
HAVING
    COUNT(*) > 1

答案 1 :(得分:13)

您可以在所有列上使用group by,然后使用count(*)>1

答案 2 :(得分:7)

试试这个

Select * From Table
Group By [List all fields in the Table here]
Having Count(*) > 1

答案 3 :(得分:3)

要检测,只需像古格所说的那样分组。

select fieldA, fieldB, count(*) from table
group by fieldA, fieldB
having count(*) > 1

如果你想删除dupes ......伪....

select distinct into a temp table
truncate original table
select temp table back into original table

使用truncate,如果你有FK约束,你可能会遇到问题,所以要聪明地删除约束并确保你不要孤立记录。

答案 4 :(得分:3)

除了提供的建议之外,我将继续努力防止将来出现重复,而不是试图在以后找到它们。

这是使用应该是唯一的列(或列组)上的唯一索引来完成的。请记住,数据库中的数据可以通过您正在处理的特定应用程序以外的其他位置进行修改,因此最好在数据库级别定义表中允许和不允许的内容。