在表中查找具有不同ID的重复记录

时间:2017-09-06 19:35:51

标签: sql-server duplicates self-join

我有一张表格如下:

ID     Product#   Service#   ServiceDate
1      100        122        2017-01-02
2      100        124        2017-03-02
3      122        133        2017-04-02        
100    100        122        2017-05-02

我需要找到具有相同产品#和服务#但不同ID的记录。为此,我编写了以下代码:

Select * 
FROM MyTable as M1 Inner join 
MyTable as M2 on 
M1.Product#=M2.Product# and M1.Service#=M2.Service# and M1.ID!=M2.ID

但是,我得到了重复的结果:

ID   Product# Service#  ServiceDate  ID   Product#  Service#  ServiceDate
1    100      122       2017-01-02   100  100       122       2017-05-02 
100  100      122       2017-05-02   1    100       122       2017-01-02

知道如何消除这些重复的行吗?我需要看到一个结果:

  ID   Product# Service#  ServiceDate  ID   Product#  Service#  ServiceDate
  1    100      122       2017-01-02   100  100       122       2017-05-02 

2 个答案:

答案 0 :(得分:1)

尝试以下方法:

Select  * 
FROM MyTable as M1 
Inner join MyTable as M2 on M1.Product#=M2.Product# and M1.Service#=M2.Service# and M1.ID!=M2.ID
where m1.id < m2.id

解释:您的示例显示了每个硬币的两面;通过限制其中一个ID小于另一个,您将自动只有一半的记录,有效地获得所有独特的组合。

加分:为了好玩,我尝试在您的示例数据集中添加一个重复的行,并且它按预期工作。

答案 1 :(得分:0)

如果您只想返回没有重复列的两行,请替换

Select *

Select M1.*