私は学生とクイズ テーブルの間に多対多の関係を持っており、通常はセットアップに 3 つのテーブルを使用し、それぞれに 1 つとジャンクション テーブルを使用します。すべての生徒を対応するクイズのスコアとともにリストアップし、また、彼らが受けたことのないクイズもリストアップしたいと思います。これは、ジャンクションで関係がなくても、その学生をそのクイズに連れて行きたいということです
データベースの現在の状態は、3 人の生徒と 2 つのクイズがあります。最初の 2 人は 1 回目のクイズを受けましたが、2 回目は受けませんでした。3 番目の生徒はどちらも受けませんでした。これは、ジャンクション テーブルに 2 つのエントリがあり、どちらもクイズ 1 と、それぞれのスコアを持つ最初の 2 人の学生の両方を指していることを意味します。
私が得ようとしている結果は次のようになります。
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
関係があるかどうかに関係なく、すべての生徒とクイズを取得するには、どのような変更が必要ですか?