Mysql
 sql >> Database >  >> RDS >> Mysql

Colonna sconosciuta MySQL nella clausola ON

Non mischiare lo stile ANSI-89 e lo stile ANSI-92. Hanno una precedenza diversa che può portare a errori di confusione, ed è quello che è successo qui. La tua richiesta viene interpretata come segue:

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

In quanto sopra, i join che utilizzano la parola chiave JOIN vengono valutati prima ancora che venga considerato il join in stile virgola. A quel punto la tabella p non è ancora dichiarato.

Da MySQL manuale :

Tuttavia, la precedenza dell'operatore virgola è inferiore a INNER JOIN, CROSS JOIN, LEFT JOIN e così via. Se mescoli i join con virgola con gli altri tipi di join quando c'è una condizione di join, un errore del formato colonna sconosciuta 'col_name' in 'clausola on' può accadere. Le informazioni su come affrontare questo problema sono fornite più avanti in questa sezione.

Consiglio sempre utilizzando i join di stile ANSI-92, ovvero utilizzando la parola chiave 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

Correlati: