我在学生和测验表之间有一个多对多的关系,通常会使用 3 个表进行设置,每个表和一个连接表。我想列出所有学生及其相应的测验分数,并列出他们从未参加过的测验。这意味着即使他们在路口没有任何关系,我也想接受学生进行测验
数据库的当前状态是我有 3 个学生和 2 个测验。前两个参加了第一次测验,但没有参加第二次测验。第三个学生两个都没有。这意味着联结表有两个条目,都指向测验 1,前两个学生都有各自的分数。
我打算得到的结果是这样的:
student_id name quiz score total
1 john 1 5 10
1 john 2 10
2 jake 1 10 10
2 jake 2 10
3 jane 1 10
3 jane 2 10
现在,我有这个查询,我希望它可以解决问题并获取形成该结构所需的所有数据:
SELECT
students.student_id,
students.formal_id,
students.last_name,
students.first_name,
quizzes.quiz_id,
quizzes.total,
quizzes.description,
_student_quiz.score
FROM
`quizzes`
LEFT JOIN _student_quiz //take all quizzes, regardless if the junction had anything for it
ON quizzes.quiz_id = _student_quiz.quiz_id
RIGHT JOIN students //take all students regardless if they are junctioned
ON _student_quiz.student_id = students.student_id
但是,它只返回包含学生和第一个测验的行
student_id name quiz score total
1 john 1 5 10
2 jake 1 10 10
3 jane NULL NULL 10
无论他们是否与之有任何关系,我都需要进行哪些更改才能获得所有学生和测验?