如何对含复合键的表执行带条件的LEFT JOIN?附具体场景需求
表连接筛选问题解决方法
需求与问题
我有Table1和Table2两张表,想要通过连接获取两类数据:
- number为1的水果
- number为12的水果(包括Table2中没有对应匹配记录的情况)
但实际用LEFT JOIN尝试时,一旦Table2里没有对应记录,这部分符合条件的结果就出不来。
核心原因与解决代码
问题根源是筛选条件放错了位置:如果把针对Table2的筛选写在WHERE子句中,LEFT JOIN产生的NULL行(也就是Table2无匹配的情况)会被直接过滤掉。正确的做法是把Table2的筛选条件放到LEFT JOIN的ON子句里,这样只会在连接阶段筛选Table2的匹配项,不会丢掉Table1里符合条件的行。
示例SQL代码:
SELECT t1.*, t2.* FROM Table1 t1 LEFT JOIN Table2 t2 ON t1.id = t2.id AND t2.number = 12 -- 仅匹配Table2中number为12的记录,无匹配则留空 WHERE t1.number IN (1, 12); -- 筛选Table1中number为1或12的水果
这段代码会保留Table1里number为1的所有行(不管Table2有没有对应数据),同时保留Table1里number为12的所有行(Table2有匹配且number为12的就显示对应数据,无匹配则Table2字段为NULL),完全符合需求。
内容的提问来源于stack exchange,提问作者Zqm
相关产品推荐
相关产品推荐

