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

0

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

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

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

Изображение 174551

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

Что я делаю неправильно?

Вот схема db

Изображение 174551

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

Изображение 174551

Теги:
right-join

2 ответа

0
Лучший ответ

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

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;

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

  • 0
    Да уж! Вот и все. Спасибо вам большое!
0

Вы делаете ПРАВОЕ СОЕДИНЕНИЕ на pruebas, у которого нет строки, можете ли вы ПРАВОЕ ПРИСОЕДИНЕНИЕ 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
  • 0
    Но таблица "pruebas" не имеет внешнего ключа с таблицей "alumnos" ... вот схема: image.ibb.co/jGBzQR/q2.png

Ещё вопросы

Сообщество Overcoder
Наверх
Меню