English 中文(简体)
如何在SQL Server表中检测重复行?
原标题:
  • 时间:2008-11-20 20:23:49
  •  标签:

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

最佳回答

展示他人所描述的一个例子:

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
问题回答

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

请试试看

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

要检测,只需按照谷歌所说的进行分组。

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

如果您想删除重复项...伪...

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

使用截断命令时,如果有外键约束可能会遇到问题,因此在删除约束并确保不孤立记录方面要聪明。

除了提供的建议之外,我还会努力避免未来的重复,而不是试图在后来找到它们。

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





相关问题
热门标签