2011-05-19 118 views
10

我有一個包含以下用戶數據的大表。在SQL中查找重複記錄

social security number 
name 
address 

我想在表中查找 其中SSN等於所有可能的重複,但名字不是

我的嘗試是:

SELECT * FROM Table t1 
WHERE (SELECT count(*) from Table t2 where t1.name <> t2.name) > 1 

回答

14

上SSN一個分組應該這樣做

SELECT 
    ssn 
FROM 
    Table t1 
GROUP BY 
    ssn 
HAVING COUNT(*) > 1 

..或者,如果你有每SSN很多行,只希望找到重名)

... 
HAVING COUNT(DISTINCT name) > 1 

編輯,哎呀,誤解

SELECT 
    ssn 
FROM 
    Table t1 
GROUP BY 
    ssn 
HAVING MIN(name) <> MAX(name) 
+0

你的答案似乎s給我行的名字是相同的。我想要名稱不相同的行 – Mark 2011-05-19 10:45:12

+0

@Mark:標題顯示「找到重複項」,誤導了我。糾正。 – gbn 2011-05-19 10:51:38

+0

我以爲我會需要自我加入。我喜歡最小/最大的想法。謝謝 – Mark 2011-05-19 11:02:11

0

這將處理超過兩個記錄與重複ssn的:

select count(*), name from table t1, ( 
    select count(*) ssn_count, ssn 
    from table 
    group by ssn 
    having count(*) > 1 
) t2 
where t1.ssn = t2.ssn 
group by t1.name 
having count(*) <> t2.ssn_count