2014-02-25 64 views
0

我正在嘗試編寫一個查詢,該查詢將顯示錶中的所有重複項。使用SQL查找重複數

我有一個表,可以稱之爲工人。這個表格有多列,我關注的兩個被稱爲SocialSecurityNbr和EmpNbr。

我想查詢顯示其中

SocialSecNbr == SocialSecNbr 
AND 
EmpNbr != EmpNbr 

下面我有我的數據之後就是我想要的輸出顯示的一個例子中的所有行。 (對於這個問題的簡單起見,我只用4位數字代表的社會安全號碼)

ID EmpNbr SocialSecNbr EmpName 
1 00001 9711   Smith,John 
2 00002 5789   Harris, Greg 
3 00001 9711   Smith,John 
4 00003 4100   Thompson,Lisa 
5 00004 1250   Fulton,Kyle 
6 00005 3999   Harris, Amber 
7 00004 1250   Fulton,Kyle 
8 00007 1250   Morlan,Richard 
9 00008 3999   Levy,Harold 

我想看到什麼作爲輸出:

ID EmpNbr SocialSecurityNbr EmpName 
5 00004 1250    Fulton,Kyle 
6 00005 3999    Harris, Amber 
7 00004 1250    Fulton,Kyle 
8 00007 1250    Morlan,Richard 
9 00008 3999    Levy,Harold 

正如你可以看到上面所有輸出中會顯示重複的社會安全號碼,John Smith除外。在實際的表格中,有很多情況下,同一個人不止一次出現,這很好,我不知道結果中會看到什麼。

我在網上搜索了關於如何做到這一點的信息,但是我發現的所有信息都是使用「Count> 1」的示例。我想我需要使用「獨特」,但我不相信我可以將該功能應用於一列。

+1

什麼味道SQL? – STLDeveloper

+0

如果使用「DISTINCT」,那麼它將只返回不同的(不同的)值不同的值,因此在使用「DISTINCT」時必須注意。 –

+0

@sentilkumar,「重複」在這裏意味着「不同的DB實體相同的SSN」 –

回答

0

至少爲MS-SQL連接表本身將工作:

select distinct w1.ID, w1.EmpNbr, w1.SocialSecNbr, w1.EmpName 
from WORKERS w1 
inner join WORKERS s2 on w1.SocialSecNbr = s2.SocialSecNbr 
         AND 
         w1.EmpNbr <> s2.EmpNbr 

其他SQL口味應該正常工作。

SqlFiddle

0

您可以使用exists條款處理這一看樣:

select ID, EmpNbr, SocialSecurityNbr, EmpName 
from workers w 
where exists (select 1 
       from workers w2 
       where w2.SocialSecurityNbr = w.SocialSecurityNbr and 
        w2.EmpNbr <> w.EmpNbr 
      ); 

隨着workers(SocialSecurityNbr, EmpNbr)索引,這應該是比較有效的。

0

下面的查詢將顯示SocSecurityNbr具有「重複」(由多個不同EmpNames定義)的Workers中的所有行。

SELECT * 
FROM Workers 
WHERE SocSecurityNbr IN (
    SELECT SocSecurityNbr 
    FROM Workers 
    GROUP BY SocSecurityNbr 
    HAVING COUNT(DISTINCT EmpName) > 1 
) 

您可以輕鬆修改此選項以更改「重複」的定義 - 例如,如果存在多個不同的員工編號。