2011-10-20 13 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) 
    )