嵌套JOIN场景下多表INNER JOIN关联失效问题求助
多表关联查询无结果问题解决
问题原因
你当前的查询使用INNER JOIN关联table_c2,这种关联要求table_b.info_id必须同时在table_c1和table_c2中存在匹配记录才会返回结果。但从数据来看,Bob对应的info_id在table_c2中没有匹配项,因此这条记录被过滤,导致整体无结果返回。另外你原查询里的关联条件写错了,应该是b.info_id而非b.info,但即使修正这个错误,INNER JOIN依然会过滤掉Bob的记录。
解决方案
改用LEFT JOIN替代table_c2的INNER JOIN,这样即使table_c2中没有匹配记录,也会保留table_a和table_c1的关联结果。根据你的期望需求,提供两种实现方式:
1. 保留双text字段
SELECT a.name, c1.text, c2.text FROM `table_a` a INNER JOIN `table_b` b ON a.id = b.person_id LEFT JOIN `table_c1` c1 ON b.info_id = c1.id LEFT JOIN `table_c2` c2 ON b.info_id = c2.id;
2. 合并text字段(匹配期望结果)
如果要得到name为"Bob"、text为"more_other_table_text"的记录,优先取table_c2的text值,无匹配时取table_c1的内容,可使用COALESCE函数:
SELECT a.name, COALESCE(c2.text, c1.text) AS text FROM `table_a` a INNER JOIN `table_b` b ON a.id = b.person_id LEFT JOIN `table_c1` c1 ON b.info_id = c1.id LEFT JOIN `table_c2` c2 ON b.info_id = c2.id;
内容的提问来源于stack exchange,提问作者MrWhiteee
相关产品推荐
相关产品推荐

