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

时间:2020-08-12 03:13:05

标签: mysql sql mariadb

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

预先感谢

1 个答案:

答案 0 :(得分:2)

您需要将当前出现在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子句仍然会删除此类记录。