Mysql SQL:按名称字段选择记录,并选择具有相同地址的所有记录
什么样的SQL查询会按名称查找记录,以及具有相同地址但可能不同名称的所有记录 我有一个选民登记数据库,当我查找一个人时,我也想看看还有谁在这个地址登记 我的数据库称为投票者,其中的表称为extract。如果我想找到一个人的名字,我会写Mysql SQL:按名称字段选择记录,并选择具有相同地址的所有记录,mysql,Mysql,什么样的SQL查询会按名称查找记录,以及具有相同地址但可能不同名称的所有记录 我有一个选民登记数据库,当我查找一个人时,我也想看看还有谁在这个地址登记 我的数据库称为投票者,其中的表称为extract。如果我想找到一个人的名字,我会写 SELECT * FROM voters.extract WHERE first_name = "John" AND last_name = "Doe"; 如果我想通过地址找到某人,我会写信 SELECT * FROM voters.extract WHERE
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条重复记录;注意到他们都有相同的名字和姓氏后,我发现了一些东西!你的回答给出了我想要的结果。