SQL:按名称字段选择记录,所有记录具有相同的地址

时间:2017-05-27 13:21:42

标签: mysql

什么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";

所以,我想要做的是找到一个人的名字,获取地址,然后找到每个人都有相同的地址。

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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为表格extract,别名为a(来自"地址")对抗自身,别名为n(来自& #34;名称&#34)。 JOIN条件与a中的每一行匹配,n中的所有行都具有相同的地址。 WHERE条件仅过滤来自n的具有所需名称的行。 SELECT子句仅在过滤后返回a的行。

用简单的英语,WHERE子句标识具有您提供的名字的选民,JOIN标识所有与WHERE找到的地址相同的选民和SELECT子句仅返回JOIN子句找到的信息。