如果右连接在 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。
我有这个查询:
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。