3表JOIN查询求助:需展示指定字段含NULL值的全量结果
解决方案
首先纠正一个概念:没有LEFT INNER JOIN这种写法,你应该是混淆了左外连接(LEFT JOIN)和内连接(INNER JOIN)。内连接只会返回多表间匹配的行,这就是你只能拿到table3数据的原因——只有存在table3关联记录的table2数据才会被返回。
根据你的需求,要保留table2的所有数据,同时关联table3和table1的匹配数据(不匹配的字段用NULL填充),正确的SQL写法如下:
SELECT t2.id AS item_id, t2.item_name, t3.stat, t3.shipped, t1.id AS user_id FROM table2 t2 LEFT JOIN table3 t3 ON t2.id = t3.item_id LEFT JOIN table1 t1 ON t3.user_id = t1.id;
逻辑说明:
- 以
table2作为主表(左表),用LEFT JOIN关联table3:这样会返回table2的所有行,不管是否存在对应的table3记录;如果没有匹配的table3数据,stat和shipped字段会显示为NULL。 - 再用
LEFT JOIN关联table1:因为table3可能没有记录,所以这里必须继续用左连接,否则会过滤掉没有table3关联的table2数据;即使有外键约束保证数据合法性,这种写法也能兼容特殊场景下的空值展示。
注意点:
- table2本身没有
item_id字段,它的主键id就是table3中item_id关联的字段,所以用t2.id AS item_id来满足你展示item_id的需求。
内容的提问来源于stack exchange,提问作者master_of_nothing
相关产品推荐
相关产品推荐

