首页 > 解决方案 > 如何重写此查询以使其工作,mysql left join multiple from

问题描述

主要问题在于这个问题: here

重要的想法是尝试解决这个问题:

这是简单的示例查询问题

CREATE TABLE a ( id int );
CREATE TABLE b ( id int );
CREATE TABLE c ( id int );

SELECT id
, (SELECT MIN(b.id)
   FROM b LEFT JOIN c ON b.id = c.id 
       AND c.id = a.id
   WHERE b.id = a.id
  ) AS something
FROM a
;
The column 'a.id' in on clause is unknown (within LEFT JOIN)

现在,尝试解决我想尝试使用此查询的问题:

select drf2.opcion 
from respuestas r2, opciones o2
left join detalle_respuesta_fija drf2 on o2.id_opcion = drf2.opcion and r2.id_respuesta
where o2.pregunta = 857
and r2.id_respuesta = 190968

 #1054 - La columna 'r2.id_respuesta' en on clause es desconocida

我需要查询返回这个(示例):

+--------
|Result
+--------
| id
| id
| NULL
| id
| NULL
+--------

.

标签: mysqlsqlsubqueryleft-join

解决方案


切勿FROM子句中使用逗号。 始终使用正确、明确、标准 JOIN的语法。

在你的情况下,那将是:

select drf2.opcion 
from respuestas r2 join
     opciones o2
     on r2.id_respuesta = o2.? left join  -- what column is used for the `JOIN`???
     detalle_respuesta_fija drf2
     on o2.id_opcion = drf2.opcion
where o2.pregunta = 857 and r2.id_respuesta = 190968;

join如果前两个表之间没有键,只需使用cross join

select drf2.opcion 
from respuestas r2 cross join
     opciones o2 left join
     detalle_respuesta_fija drf2
     on o2.id_opcion = drf2.opcion and drf2.respuesta = r2.id_respuesta
where o2.pregunta = 857 and r2.id_respuesta = 190968

推荐阅读