如何编写SQL查询提取单表关联记录?SQLite报错排查
解决SQLite查询问题
错误原因
你写的查询里,第二个SELECT语句引用了T1.Residence_Address_Line_1,但T1是第一个子查询的表别名,两个UNION的子查询是独立执行的,第二个查询无法访问第一个查询的表别名,所以触发了“no such column: T1.Residence_Address_Line_1”的错误。
正确查询写法
要实现“获取所有Smith姓氏的记录,以及和他们同地址的其他人员记录”,可以先找出所有Smith的居住地址,再查询所有住在这些地址的人员。下面是两种可行的写法:
方法1:使用子查询
SELECT Name_Last, Name_First, Residence_Address_Line_1 FROM residents WHERE Residence_Address_Line_1 IN ( SELECT Residence_Address_Line_1 FROM residents WHERE Name_Last LIKE 'Smith' ) ORDER BY Residence_Address_Line_1;
方法2:使用自连接
SELECT DISTINCT r.Name_Last, r.Name_First, r.Residence_Address_Line_1 FROM residents r JOIN residents s ON r.Residence_Address_Line_1 = s.Residence_Address_Line_1 WHERE s.Name_Last LIKE 'Smith' ORDER BY r.Residence_Address_Line_1;
这里用DISTINCT是为了避免重复记录(如果同一个地址有多个Smith的话)。
补充说明
- 两种方法都能先定位到所有Smith的地址,再拉取这些地址下的所有人员,完全覆盖你的需求:既包含Smith本人,也包含同地址的其他姓氏人员。
- 如果需要精确匹配姓氏,把
LIKE 'Smith'换成= 'Smith'会更高效;如果要模糊匹配(比如姓氏包含Smith),可以写成LIKE '%Smith%'。
内容的提问来源于stack exchange,提问作者LarryP
相关产品推荐
相关产品推荐

