如果右连接在 MySQL 上为空,则获取左 table 字段

Get left table fields if right join is null on 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

我得到了这个结果:

我需要从 "alumnos" table 获取 RIGHT JOIN 结果中的 "nombre" 和 "apellidos" 字段,因为查询的目标是获取所有"pruebas" 用户未完成的和已经完成的 ...

我做错了什么?

这是数据库架构

这是预期的结果

您正在对没有行的 pruebas 进行 RIGHT JOIN,您可以对 alumnos 进行 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

你能尝试使用这个查询吗:

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;

交叉联接获取所有可能的组合,然后检查结果中存在什么 table。