2011-10-20 3 views
1

SSN의 동일한 마지막 이름과 마지막 4 개의 동일한 이름을 가진 다른 사용자가있는 모든 사용자에 대해 user_id, last_name 및 Social_security_number를 제공하는 SQL 쿼리를 작성하고 싶습니다. 그래서 한 사람이 전체 SSN을 가지고 있고 다른 한 사람이 마지막 네 명만 있다면, 나는 마지막 네 명과 일치하기를 원합니다. 쿼리를 작성하여 둘 이상의 레코드를 가진 모든 사용자를 얻으려면 어떻게해야합니까? 자기가 가입 당신이있어 이후 :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"테이블에서 일치하므로 가짜 일치를 명시 적으로 제외하십시오. SSN을 가정

+0

감사합니다. 나는 이유를 모른다. 레코드가 요구 사항 중 하나와 일치하는 일부 사용자 ID를 반환했습니다. last_name 또는 SSN의 마지막 네 자리 –

0

이이 쿼리의 뜻은, 문자열로 저장됩니다

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) 
    ) 
관련 문제