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