![](/img/trans.png)
[英]How can I write a SQL query to find records related to a record in another table ignoring another record
[英]How do I write an SQL query to extract related records from a single table?
我有一个表,它基本上是一个人的目录 - 姓名、地址等。我想检索所有具有特定姓氏(如史密斯)的记录,以及与那些可能没有的史密斯具有相同地址的人的所有其他记录成为史密斯。 例如,如果 John Smith 住在 123 Main Street,我想检索住在 123 Main Street 的任何人的记录,即使他们的名字不是 Smith(就像使用她姓氏的妻子一样)。
我在 SQLite 中尝试了以下操作但没有成功:
select t1.Name_Last, t1.Name_First, t1.Residence_Address_Line_1 from residents T1
where (t1.name_last like "smith")
union
select t2.Name_Last, t2.Name_First, t2.Residence_Address_Line_1 from residents T2
Where T1.Residence_Address_Line_1 like T2.Residence_Address_Line_1
order by Residence_Address_Line_1;
我得到的错误是:没有这样的列:T1.Residence_Address_Line_1
您可以使用 IN 语句,或使用 CTE,例如此示例:
设置您的数据:
create table residents (
last_name varchar(20),
addr_line_1 varchar(20)
);
insert into residents values
('smith', '123 main st'),
('jones', '123 main st'),
('chang', '123 main street');
CTE 查询:
with target_address as (
select distinct addr_line_1
from residents
where last_name = 'smith'
)
select r.*
from residents r
join target_address t
on r.addr_line_1 = t.addr_line_1;
Output:
姓 | addr_line_1 |
---|---|
史密斯 | 123 主街 |
琼斯 | 123 主街 |
替代方案,IN 语句:
select *
from residents
where addr_line_1 in (
select distinct addr_line_1
from residents
where last_name = 'smith')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.