如何查找重复记录

3

使用 Sql Server 2000

我想在表中找到重复的记录

表1

ID  Transaction Value

001 020102      10
001 020103      20
001 020102      10 (Duplicate Records)
002 020102      10
002 020103      20
002 020102      10 (Duplicate Records)
...
...

对于不同的ID,交易和价值可以重复出现,但对于相同的ID则不行...

预期输出

重复记录是...

ID  Transaction Value  
001 020102      10 
002 020102      10 
...
...

如何查询重复记录。
需要查询帮助。

1
这个问题在这个网站上已经被回答了很多次,例如:http://stackoverflow.com/questions/2848243/sql-to-search-duplicates - Igor Borisenko
问题:在结果集中,记录是否允许重复(当原始表中存在多个重复项时)或每个记录只表示单个重复集? - Robert Koritnik
4个回答

5
您可以使用

标签


SELECT 
  ID, Transaction, Value
FROM 
  Table1
GROUP BY 
  ID, Transaction, Value
HAVING count(ID) > 1

0
Select Id, Transaction, Value, Count(id) 
from table 
group by Id, Transaction, Value
having count(id) > 1

这个查询将显示ID在每个Id条目中重复的次数计数。如果您不需要它,可以从选择子句中简单地删除Count(Id)列。


如果您仔细阅读问题,他已经提到:“交易和价值可以针对不同的ID重复,但不能针对相同的ID重复...” - Sidharth Panwar
但这样做不起作用,因为您必须在Transaction和Value上使用聚合函数才能将它们放入select子句中。而且,仅按ID分组不会获取重复项。尝试运行您的代码,您会发现它甚至无法运行。无论如何,其他人已经意识到了这一点,并对您的答案进行了-1。 - Robert Koritnik
我的错误。同意了。更正了查询。 - Sidharth Panwar

0

自连接(带有其他主键或时间戳等)

我看到人们提供了分组解决方案,但没有人提供自连接解决方案。唯一的问题是您需要另一个行描述符,该描述符对于每个记录应该是唯一的。无论是主键、时间戳还是其他任何东西... 假设唯一列的名称为Uniq,这将是解决方案:

select distinct ID, [Transaction], Value
from Records r1
    join Records r2
    on ((r2.ID = r1.ID) and
        (r2.[Transaction] = r1.[Transaction]) and
        (r2.Value = r1.Value) and
        (r2.Uniq != r1.Uniq))

最后一个连接列使得不必将每一行与自身连接,而只连接其他重复的行...

为了找出哪种方法最适合您,您可以检查它们的执行计划并进行一些测试。


-1
你可以这样做:
SELECT ID, Transaction, Value
FROM Table
GROUP BY ID, Transaction, Value
HAVING COUNT(*) > 1

如果您没有主键,则需要将不同的值选择到单独的表中以删除重复项,然后从该表中删除所有内容,最后将不同的记录复制回来:

SELECT ID, Transaction, Value
INTO #tmpDeduped
FROM Table
GROUP BY ID, Transaction, Value

DELETE FROM Table

INSERT Table
SELECT * FROM #tmpDeduped

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接