2011-10-20 12 views
1

我想編寫一個SQL查詢,該查詢爲所有用戶提供user_id,last_name和Social_security_number,這些用戶的另一個用戶具有相同的姓氏和相同的RIGHT最後四個SSN。所以如果一個人擁有完整的SSN,而另一個只有最後四個,我只想匹配最後四個。如何編寫查詢以獲取所有用戶超過1條記錄?如何根據SSN得到重複記錄

回答

0
SELECT orig.user_id, orig.last_name, orig.Social_security_number, 
    dupe.user_id, dupe.last_name, dupe.Social_Security_number 
FROM yourtable AS orig 
INNER JOIN yourtable AS dupe ON 
    (orig.last_name=dupe.last_name) AND 
    (RIGHT(orig.Social_Security_number, 4) = RIGHT(dupe.Social_Security_Number, 4)) AND 
    (orig.user_id <> dupe.user_id) 

基本上做什麼表格你在存儲這個加盟的最後名稱字段,最後4位數字的SSN,以及一個邊緣的情況下自聯接:因爲你自己的加盟,每個記錄都會在「dupe」表中匹配,因此明確排除了假匹配。

+0

感謝。我不知道爲什麼。記錄返回了一些與需求相匹配的用戶標識。無論是姓氏還是SSN的最後四位數字 –

0

這個查詢到,假設SSN存儲爲一個字符串:

SELECT 
    u1.user_id, u1.last_name, u1.social_security_number 
FROM 
    users u1 
WHERE 
    EXISTS (
     SELECT 
      * 
     FROM 
      users u2 
     WHERE 
      u1.user_id <> u2.user_id 
      AND u1.last_name = u2.last_name 
      AND SUBSTRING(u1.social_security_number, -4) = SUBSTRING(u2.social_security_number, -4) 
    )