Ce qui suit devrait renvoyer tous les étudiants, avec les scores de l'examen 32 s'ils existent.
SELECT scores.result,students.id,exam.name, exam.id
FROM exam
INNER JOIN scores ON exam.id = scores.exam_id
RIGHT OUTER JOIN students ON scores.user_id = students.user_id
WHERE exam.id = 32
Votre clause select n'a rien utilisé à partir des étudiants_sujets ou des fonctions d'agrégation, donc je ne sais pas à quoi servait la jointure? Vous pouvez peut-être commencer par ce qui précède et construire à partir de là.
Edit :Nouvelle stratégie basée sur mon premier commentaire. Essayez de localiser tous les étudiants, puis trouvez les scores qui existent, nuls s'il n'y en a pas.
SELECT scores.result,students.id,exam.name, exam.id
FROM exam
INNER JOIN students_subjects ON students_subjects.group_id = exam.group_id
INNER JOIN students ON students_subjects.user_id = students.user_id
LEFT OUTER JOIN scores ON scores.user_id = students.user_id
AND scores.exam_id = exam.id
WHERE exam.id = 32