如何根据SSN获取重复记录

时间:2011-10-20 14:32:04

标签: mysql

我想编写一个SQL查询,为所有用户提供user_id,last_name和Social_security_number,这些用户的另一个用户具有相同的姓氏,并且相同的RIGHT最后四个SSN。因此,如果一个人有一个完整的SSN而另一个只有最后四个,我只想在最后四个匹配。如何编写查询以使所有用户拥有超过1条记录?

2 个答案:

答案 0 :(得分: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)

基本上在你存储的任何表上进行自我加入,加入姓氏字段,SSN的最后4位数和一个边缘情况:因为你是自我加入,所以每条记录都匹配本身在“欺骗”表中,所以明确排除那个假匹配。

答案 1 :(得分: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)
    )