加入特定密钥不起作用

时间:2014-12-27 23:08:57

标签: php mysql sql

我有四张这样的表:

  • schoolyear( id
  • 学生( id schoolyear_id
  • 测试( id
  • 成绩( ID test_id student_id ,得分)

学生与schoolyear(通过fk)相关联,并且成绩与teststudent到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` = ?

我目前的陈述中没有任何内容告诉它特定的测试,但这就是我想要的。

2 个答案:

答案 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  = ?