左联接不显示所有左联接行

问题描述

LEFT JOIN应该在左表中显示所有行,但是在运行以下查询时,我仅获得具有相同ID的地方值。 请有人可以给我一些有关我可能会出错的指导:

SELECT us.*,sp.date,k.kelas as nama_kelas
FROM gtech_tbl_user_siswa us
JOIN sekolah_tbl_kelas k ON k.id = us.kelas
LEFT OUTER JOIN gtech_tbl_absensi_siswa_pertemuan sp ON us.id = sp.id_user 
WHERE sp.id_materi = 520
AND sp.id_sub_materi = 1206

预先感谢

解决方法

您需要将当前出现在WHERE子句中的 right 表上的条件移动到涉及该表的左联接的ON子句中:

SELECT *
FROM gtech_tbl_user_siswa us
INNER JOIN sekolah_tbl_kelas k ON k.id = us.kelas
LEFT OUTER JOIN gtech_tbl_absensi_siswa_pertemuan sp
    ON us.id = sp.id_user AND sp.id_materi = 520 AND sp.id_sub_materi = 1206;

您遇到的问题是由于WHERE子句发生在左连接的 之后。因此,即使实际上您的左联接确实可以避免联接左侧的不匹配记录被过滤掉,但以后的WHERE子句仍然会删除此类记录。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...