2017-05-27 18 views
0

名前でレコードを検索するSQLクエリと同じアドレスを持ち、名前は異なる可能性があるすべてのレコードSQL:名前でレコードを選択するフィールドと同じアドレスを持つすべてのレコード

私は有権者登録データベースを持っていますが、私が個人を検索すると、他の誰がその住所に登録されているのかも知りたいと思います。

私のデータベースは有権者と呼ばれ、その中のテーブルは「抽出」と呼ばれます。私は名前で誰かを見つけたい場合は、私は

SELECT * FROM voters.extract WHERE first_name = "John" AND last_name = "Doe"; 

を書き、私はアドレスで誰かを見つけたい場合は、私はそう

SELECT * FROM voters.extract WHERE street_num = "100" 
AND addr_unit = "A" AND street_name = "Main Street" AND town = "My Town"; 

を書き、私がやりたいことは、名前で誰かを見つける取得することですその住所を持っている人を見つけてください。

答えて

0

あなたはjoinまたはinまたはexistsを使用することができます。

SELECT e.* 
FROM (SELECT e.* 
     FROM voters.extract e 
     WHERE first_name = 'John' AND last_name = 'Doe' 
    ) en JOIN 
    voters.extract e 
    USING (street_num, addr_unit, street_name, town); 
0

これは、通常の(そしておそらく最速)あなたの質問のためのソリューションです:テーブルextract

SELECT a.* 
FROM voters.extract a 
INNER JOIN voters.extract n 
    ON a.street_num = n.street_num 
    AND a.addr_unit = n.addr_unit 
    AND a.street_name = n.street_name 
    AND a.town = n.town 
WHERE n.first_name = "John" AND n.last_name = "Doe" 

クエリJOINa(別名「アドレス」)としてエイリアスされ、n(「名前」からのエイリアス)としてエイリアスされます。 JOINの条件は、aの各行と、同じアドレスを持つnのすべての行と一致します。 WHERE条件は、希望の名前を持つnの行のみをフィルタリングします。 SELECT句は、フィルタリング後にaの行のみを返します。平易な英語で

WHERE句は有権者が指定した名前を持つ識別し、JOINJOIN句で見つけた情報のみWHEREで見つかったものとSELECT句が戻ると同じアドレスを持つすべての有権者を特定します。

+0

ありがとうございました。これは前と同じように見えますが、9つの重複レコードがあります。彼らに気づいた後に私が発見したものはすべて同じ名義と名字でした!あなたの答えは、私が探していた結果でした。 – Unclechromedome

関連する問題