繁体   English   中英

如何编写 SQL 查询以从单个表中提取相关记录?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM