我有这个问题:
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”表的RIGHT JOIN结果中获得“nombre”和“apellidos”字段,因为查询的目标是获取用户尚未完成的所有“pruebas”和那些它已经做了......
我做错了什么?
这是db架构
这是预期的结果
答案 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;
交叉连接获取所有可能的组合,然后检查以查看结果表中存在的内容。