Mysql
 sql >> Base de données >  >> RDS >> Mysql

Mysql joint quatre tables et affiche la valeur NULL

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