You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL LEFT JOIN查询异常:如何实现从table1查询全部数据并关联table2的指定列?

解决你的LEFT JOIN查询问题

嘿,我一眼就看出你的SQL哪里出问题了——你把LEFT JOIN的关联条件放在了WHERE子句里,这直接改变了LEFT JOIN的行为,导致没达到预期效果!

问题所在

LEFT JOIN的核心是保留左表(table1)的所有行,哪怕右表(table2)没有匹配的数据。但你用WHERE B.code = A.code的时候,那些table2里没有匹配的行中,B.code会是NULL,而NULL = A.code的结果是不成立的,这些行就会被过滤掉,最后结果其实和INNER JOIN一样,完全丢失了你想要保留的table1全部数据。

正确的写法

把关联条件放在ON子句里,这是LEFT JOIN的标准用法,能完美实现你的需求:

SELECT A.*, B.category 
FROM table1 A 
LEFT JOIN table2 B ON B.code = A.code;

这样执行的话,table1的每一行都会被返回:

  • 如果table2里有code和A.code匹配的行,就会把对应的category列带上;
  • 如果没有匹配的行,B.category就会显示为NULL,但table1的所有数据都会被保留。

额外提示

如果你还有其他过滤条件(比如只想保留table1中状态为活跃的行),可以把这些条件放在WHERE子句里,但关联条件一定要留在ON里,比如:

SELECT A.*, B.category 
FROM table1 A 
LEFT JOIN table2 B ON B.code = A.code
WHERE A.status = 'active';

内容的提问来源于stack exchange,提问作者Richard Johnson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.01 02:22:46