检测10列/ 50K行表中重复项的最有效方法是什么?我正在使用MSSQL 8.0
答案 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)
除了提供的建议之外,我将继续努力防止将来出现重复,而不是试图在以后找到它们。
这是使用应该是唯一的列(或列组)上的唯一索引来完成的。请记住,数据库中的数据可以通过您正在处理的特定应用程序以外的其他位置进行修改,因此最好在数据库级别定义表中允许和不允许的内容。