sql >> Base de Datos >  >> RDS >> Mysql

Mysql une cuatro tablas y muestra el valor NULL

Lo siguiente debe devolver a todos los estudiantes, con puntajes del examen 32 si existen.

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

Su cláusula de selección no usó nada de Students_subjects o funciones agregadas, por lo que no estoy seguro de para qué fue la unión. Tal vez pueda comenzar con lo anterior y construir desde allí.

Editar:Nueva estrategia basada en mi primer comentario. Intente ubicar a todos los estudiantes y luego encuentre las puntuaciones que existen, nulas si no hay ninguna.

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