什么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 :(得分:0)
您可以使用join
或in
或exists
:
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
子句找到的信息。