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

相关问题