2017-05-27 98 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

您可以使用joininexists

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

這是一般的(也可能是最快的),你的問題的解決方案:

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" 

查詢JOIN S中的表extract ,別名爲a(來自「地址」),其別名爲n(來自「name」)。 JOIN條件與來自a的每一行匹配,並且來自n的所有行具有相同的地址。 WHERE條件僅過濾來自n的具有所需名稱的行。過濾後,SELECT子句僅返回a中的行。

用簡單的英語,在WHERE子句標識爲您提供的名選民中,JOIN識別所有具有相同的地址作爲一個由WHERE發現SELECT條款選民只返回JOIN條款中找到的信息。

+0

謝謝。這看起來與我以前做過的事情類似,但導致了9個重複記錄;我注意到他們都有相同的名字和姓氏後才發現的東西!你的回答給出了我正在尋找的結果。 – Unclechromedome

相關問題