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

MySQL左连接查询:如何保留主表数据仅过滤关联表字段

解决MySQL LEFT JOIN后主表数据丢失问题

你的问题核心是关联表的过滤条件放错了位置:把ph.status的判断放在WHERE子句里,会直接过滤掉所有不满足该条件的行——包括主表原本存在但关联表无匹配数据的行,因为此时ph.status是NULL,和任何值比较都不成立,导致主表数据也被过滤了。

修改方案

把ph.status的条件从WHERE移到LEFT JOIN的ON子句中,这样只会过滤关联表的匹配行,不会影响主表数据的显示:

SELECT sv.loaded_by, sv.supervised_by, ph.extra_photo, ph.status 
FROM wla_loading_sv sv 
LEFT JOIN wla_extraPhoto ph ON sv.bl_id = ph.bl_id AND ph.status = 1
WHERE sv.bl_id = 4747

效果说明

  • 当ph.status=1时,关联表符合条件的行正常匹配显示,主表数据完整保留;
  • 当你需要查询ph.status=0时,只需要把ON子句里的ph.status = 1改成ph.status = 0,此时主表数据依然全部显示,关联表中status不等于0的行对应的extra_photo和status字段会显示为NULL。

内容的提问来源于stack exchange,提问作者Ratu Batu Hamlo Koto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 12:07:02