2011-10-20 8 views
1

SSNの同じ最後の名前と同じRIGHTの4人の別のユーザーを持つすべてのユーザーのuser_id、last_nameおよびSocial_security_numberを取得するSQLクエリを作成します。だから、ある人が完全なSSNを持っていて、他の人が最後の4人しかいなければ、私は最後の4人に合ってほしい。クエリを作成して、複数のレコードを持つすべてのユーザーを取得するにはどうすればよいですか?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) 

は、基本的には、最後の名前フィールド、SSNの最後の4桁の数字、および1つのエッジケースに参加し、これを中に保存しているものは何でも、テーブルの上に自己参加するん:あなたは自分が加入していることから、すべてのレコードが "dupe"テーブル内で一致するので、その偽のマッチを明示的に除外します。 SSNを想定し

+0

感謝を。どうしてか分かりません。レコードは、要件の1つにちょうど一致するいくつかのユーザーIDを返しました。 last_nameまたはSSNの最後の4桁 –

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) 
    ) 
関連する問題