我有四张这样的表:
学生与schoolyear
(通过fk)相关联,并且成绩与test
和student
到fk&s相关联。
我希望所有学生都可以返回特定的学校,并加入测试score
以及学生表中的所有其他字段(如果存在)。如果不是,则score
字段应为null。这就是我所拥有的:
SELECT *, `student`.`id` as `studentid`
FROM `student`
LEFT JOIN `grade` ON `grade`.`student_id` = `student`.`id`
WHERE `student`.`schoolyear_id` = ?
我目前的陈述中没有任何内容告诉它特定的测试,但这就是我想要的。
答案 0 :(得分:1)
SELECT *, `student`.`id` as `studentid`, t.*
FROM `student`
LEFT JOIN `grade` ON `grade`.`student_id` = `student`.`id`
LEFT JOIN `test` t ON `t`.`id` = `grade`.`test_id`
WHERE `student`.`schoolyear_id` = ?
and test_id = ?
答案 1 :(得分:0)
只需将条件添加到ON子句即可。这将确保学生保持包括在内,即使该考试没有成绩。
SELECT g.*, s.id
FROM Student s
LEFT JOIN Grade g
ON g.student_id = s.id
AND g.id = ?
WHERE s.schoolyear_id = ?