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

MySQL使用LEFT JOIN加UNION联表时WHERE过滤条件失效问题求助

问题根因

你当前的查询使用了UNION/UNION ALL合并两个结果集,第二个SELECT子句没有加任何过滤条件,直接返回两个表左关联的全量数据,所以无论你怎么修改第一个SELECT里的id_materi、id_user参数,最终合并后的结果都会包含所有关联数据,自然不会有变化。

你的需求是保留所有hari表的记录,只关联符合指定id_materi、id_user的aktifitas_materi记录,不需要用UNION这么复杂的写法,直接把过滤条件放到LEFT JOIN的ON子句里即可,注意不能放到WHERE子句中,否则左关联会变成类似内关联的效果。

正确查询语句

SELECT * 
FROM hari 
LEFT JOIN aktifitas_materi 
  ON hari.id_hari = aktifitas_materi.id_hari 
  AND aktifitas_materi.id_materi = '1631246767791' 
  AND aktifitas_materi.id_user = '1631016713249';

逻辑说明

  • 过滤条件写在LEFT JOIN ... ON后面,只会过滤右表(aktifitas_materi)的关联数据,不符合条件的右表字段会返回NULL,同时左表(hari)的所有记录都会保留,完全符合你要的预期效果。
  • 如果过滤条件写在WHERE后面,会对关联后的整个结果集做过滤,不符合条件的左表记录也会被排除,就失去了左关联的意义。

当你修改id_materi或者id_user为不存在的值时,所有aktifitas_materi相关的字段都会返回NULL,和你预期的结果一致。

内容的提问来源于stack exchange,提问作者Haksatrya Bhaswara

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:06:04