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

Mysql SQL:按名称字段选择记录,并选择具有相同地址的所有记录,mysql,Mysql,什么样的SQL查询会按名称查找记录,以及具有相同地址但可能不同名称的所有记录 我有一个选民登记数据库,当我查找一个人时,我也想看看还有谁在这个地址登记 我的数据库称为投票者,其中的表称为extract。如果我想找到一个人的名字,我会写 SELECT * FROM voters.extract WHERE first_name = "John" AND last_name = "Doe"; 如果我想通过地址找到某人,我会写信 SELECT * FROM voters.extract WHERE

什么样的SQL查询会按名称查找记录,以及具有相同地址但可能不同名称的所有记录

我有一个选民登记数据库,当我查找一个人时,我也想看看还有谁在这个地址登记

我的数据库称为投票者,其中的表称为extract。如果我想找到一个人的名字,我会写

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

因此,我要做的是按姓名查找某人,获取地址,然后查找每个人都有相同的地址。

您可以使用
加入
中的
存在

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);
对于您的问题,这是通常的(可能是最快的)解决方案:

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
(从“名称”)。
JOIN
条件将
a
中的每一行与
n
中具有相同地址的所有行相匹配。
WHERE
条件仅过滤
n
中具有所需名称的行。过滤后,
SELECT
子句仅返回
a
中的行


在简单的英语中,
WHERE
子句标识具有您提供的姓名的投票者,
JOIN
标识与
WHERE
找到的投票者地址相同的所有投票者,
SELECT
子句仅返回
JOIN
子句找到的信息。

谢谢。这看起来类似于我以前做的事情,但导致了9条重复记录;注意到他们都有相同的名字和姓氏后,我发现了一些东西!你的回答给出了我想要的结果。