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

时间:2017-12-18 19:28:47

标签: mysql right-join

我有这个问题:

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

我有这个结果:

enter image description here

我需要在“alumnos”表的RIGHT JOIN结果中获得“nombre”和“apellidos”字段,因为查询的目标是获取用户尚未完成的所有“pruebas”和那些它已经做了......

我做错了什么?

这是db架构

enter image description here

这是预期的结果

enter image description here

2 个答案:

答案 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

答案 1 :(得分: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;

交叉连接获取所有可能的组合,然后检查以查看结果表中存在的内容。