如何基于首个SELECT查询结果关联第二个查询获取整合数据?
问题描述
我有一个包含JOIN的复杂SELECT查询,简化后如下:
SELECT name, surname FROM table1;
查询结果为:
name surname john smith jacob smath judy smooth
我还有另一个复杂查询用于查询salary,需以name和surname作为WHERE条件:
SELECT salary FROM table2 where name = "John" and surname = "Smith"
该查询针对每个name和surname组合仅返回单个salary值。
我希望将这两个查询合并,使第二个查询的结果关联到第一个查询,得到如下格式的结果:
name surname salary john smith 100 jacob smath 50 judy smooth 80
我尝试了如下伪代码:
SELECT name, surname FROM table1 as data full outer join( SELECT salary FROM table2 where name = data.name and surname = data.surname )
但报错:
There is an entry for table "data" but it cannot be
referenced from this part of the query.
请问该如何实现需求?
解决方案
直接通过JOIN的ON子句关联两个表的name和surname字段即可,不需要用子查询嵌套的方式,具体写法如下:
推荐SQL语句
SELECT t1.name, t1.surname, t2.salary FROM table1 t1 LEFT JOIN table2 t2 ON t1.name = t2.name AND t1.surname = t2.surname;
关键说明
- 你之前的错误是因为子查询无法直接引用外部查询的表别名
data——子查询是独立执行的,无法访问外部查询的上下文,所以会报错。 - 这里用
LEFT JOIN可以确保table1的所有记录都被保留,哪怕table2里没有对应name+surname的salary记录(此时salary字段会显示为NULL)。如果你的业务场景中table2一定存在对应记录,也可以替换成INNER JOIN。 - 若需要保留两个表中所有不匹配的记录,才需要使用
FULL OUTER JOIN,但多数场景下LEFT JOIN就能满足你的需求。
内容的提问来源于stack exchange,提问作者Jacob
相关产品推荐
相关产品推荐

