2013-05-29 140 views
0

嗨对不起什么似乎提前这么简单的问题...SQL查询来选择重复登记

我有一些实验室的数百万行的数据和以下字段(其中包括)

  • 实验室参考编号
  • 用的名字
  • DOB

我需要做一个查询,将给我所有不同的实验室参考号 ,姓,名和DOBs,其中实验室参考号 有多个关联的姓,名和出生日期。

即查询来突出显示,其中一个实验室参考号具有与它

例如相关的重复的候选

12345, Bob, Smith, 30/038/1981 
12345, Fred, Smith, 31/03/1981 

任何帮助将不胜感激。

+0

发布完整的数据库模式请 – Raptor

+3

什么DBMS?你尝试过什么吗?如果是的话,请张贴它和问题。如果不是:为什么不呢? –

+0

@ShivanRaptor:没有必要。该问题包含相关信息。 –

回答

3
SELECT * FROM TABLE WHERE REF IN 
    (SELECT REF FROM TABLE GROUP BY REF HAVING COUNT(*) > 1) 

您也可以使用,如果需要SELECT DISTINCT *

+0

+1这将返回两个相同的行,即使REF将与相同的'FirstName,Surname,Dob'关联。我想这就是OP后的内容:) – Andomar

+0

是的 - 我稍后编辑了我的答案,因为它不是100%清楚OP的要求 –

1
select RefNr 
,  Forename 
,  Surname 
,  DOB 
from YourTable yt1 
where exists 
     (
     select * 
     from YourTable yt2 
     where yt1.RefNr = yt2.RefNr 
       and 
       (
        yt1.Forename <> yt2.Forename 
        or yt1.Surname <> yt2.Surname 
        or yt1.DOB <> yt2.DOB 
       ) 
     ) 
+0

这是一个很好的答案 - 这取决于您如何阅读问题 - 如果Bob Smith出现两次(相同的DoB)是重复的?如果没有,那么这是比我更好的答案 –