如何将WHERE子查询中的c.col3列纳入SQL查询结果集?
解决将tableC的col3纳入结果集的方案
原查询通过IN子查询关联tableB和tableC,但这种方式只能判断匹配关系,无法获取tableC的字段。要把c.col3加入结果集,需要将子查询的逻辑改为JOIN关联,这样就能直接获取tableC的字段。
解法一:修改子查询,关联tableB与tableC
将tableB和tableC通过col2关联,在子查询中包含c.col3,外层查询即可选中该字段:
SELECT DISTINCT a.col1, b.col2, b.col4, c.col3 FROM tableA a RIGHT OUTER JOIN (SELECT tb.col2, tb.col4, tc.col3 FROM tableB tb INNER JOIN tableC tc ON tb.col2 = tc.col2 WHERE tc.col3 IN ('', '', '')) b ON a.col1 = b.col1
解法二:重构查询,直接关联三个表
去掉子查询,直接将三个表按关联条件连接,逻辑更直观:
SELECT DISTINCT a.col1, b.col2, b.col4, c.col3 FROM tableB b INNER JOIN tableC c ON b.col2 = c.col2 RIGHT OUTER JOIN tableA a ON a.col1 = b.col1 WHERE c.col3 IN ('', '', '')
注意事项
- 保留
DISTINCT关键字,避免JOIN后产生重复行,和原查询的去重逻辑一致。 - 用
INNER JOIN关联tableB和tableC,和原查询中IN子查询的逻辑等价,只会保留匹配的行。
内容的提问来源于stack exchange,提问作者Ar_
相关产品推荐
相关产品推荐

