Получить левые поля таблицы, если правое объединение равно нулю на MySQL

У меня есть этот запрос:

SELECT 
a.nombre,
a.apellidos,
p.nombre AS prueba,
IF(r.puntuacion IS NULL, 0, 1) AS prueba_realizada,
r.puntuacion,
r.id
FROM alumnos a
LEFT JOIN resultados r ON r.alumno_id = a.id
RIGHT JOIN pruebas p ON p.id = r.prueba_id

И у меня есть этот результат:

Мне нужно получить поля "nombre" и "apellidos" в правом результате соединения из таблицы "alumnos", потому что цель запроса - получить все "pruebas", которые пользователь не сделал, и те, которые он уже сделал сделанный...

Что я делаю не так?

Вот схема БД

Это ожидаемый результат

2 ответа

Решение

Можете ли вы попробовать использовать этот запрос:

SELECT pa.nombre, pa.apellidos, pa.prueba,
IF(r.puntuacion IS NULL, 0, 1) AS prueba_realizada,
r.puntuacion,
r.id
FROM 
resultados r RIGHT JOIN
(SELECT a.id alumno_id,
 a.nombre,
a.apellidos,
p.id prueba_id,
p.nombre AS prueba
FROM pruebas p CROSS JOIN alumnos a) pa
ON r.alumno_id = pa.alumno_id 
AND r.prueba_id = pa.prueba_id;

Перекрестное соединение получает все возможные комбинации, а затем проверяет, что существует в таблице результатов.

Вы делаете RIGHT JOIN на pruebas, у которого нет ряда, вы можете RIGHT JOIN на pruebas на выпускниках? некоторые как a.id= p.id

SELECT 
a.nombre,
a.apellidos,
p.nombre AS prueba,
IF(r.puntuacion IS NULL, 0, 1) AS prueba_realizada,
r.puntuacion,
r.id
FROM alumnos a
LEFT JOIN resultados r ON r.alumno_id = a.id
RIGHT JOIN pruebas p ON p.id = a.id
Другие вопросы по тегам