Mysql
 sql >> Database >  >> RDS >> Mysql

Mysql unisce quattro tabelle e mostra il valore NULL

Di seguito devono restituire tutti gli studenti, con i punteggi dell'esame 32 se esistono.

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

La tua clausola select non utilizzava nulla da Students_subjects o funzioni aggregate, quindi non sono sicuro a cosa servisse il join? Forse puoi iniziare con quanto sopra e costruire da lì.

Modifica:nuova strategia basata sul mio primo commento. Prova a individuare tutti gli studenti, quindi trova i punteggi esistenti, null se nessuno.

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