sql >> Base de Datos >  >> RDS >> Mysql

Columna desconocida de MySQL en la cláusula ON

No mezcle uniones de estilo ANSI-89 y ANSI-92. Tienen diferentes precedencias que pueden conducir a errores confusos, y eso es lo que ha sucedido aquí. Su consulta se interpreta de la siguiente manera:

FROM property p, (
    propertygeometry pg
    JOIN shortlist sl ON sl.PropertyID = p.id AND sl.MemberID = 384216
    ...
)

En lo anterior, las uniones que usan la palabra clave JOIN se evalúan primero antes de que se considere la unión de estilo coma. En ese punto la tabla p aún no se ha declarado.

De MySQL instrucciones :

Sin embargo, la precedencia del operador de coma es menor que la de INNER JOIN, CROSS JOIN, LEFT JOIN, etc. Si mezcla combinaciones de coma con los otros tipos de combinación cuando hay una condición de combinación, un error de la forma Columna desconocida 'col_name' en 'cláusula on' puede ocurrir. Más adelante en esta sección se proporciona información sobre cómo tratar este problema.

Recomendaría siempre usando combinaciones de estilo ANSI-92, es decir, usando la palabra clave JOIN:

SELECT p.*,
    IF(COUNT(ms.PropertyID) > 0,1,0) AS Contacted,
    pm.MediaID,
    date_format(p.AvailableFrom, '%d %b %Y') AS 'AvailableFrom',
    astext(pg.Geometry) AS Geometry
FROM property p
    JOIN propertygeometry pg ON p.PropertyGeometryID = pg.id
    JOIN shortlist sl ON sl.PropertyID = p.id AND sl.MemberID = 384216
    LEFT JOIN message ms ON ms.PropertyID = p.id AND ms.SenderID = 384216
    LEFT JOIN property_media pm ON pm.PropertyID = p.id AND pm.IsPrimary = 1
WHERE p.paused = 0
GROUP BY p.id

Relacionado: