Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Unbekannte MySQL-Spalte in der ON-Klausel

Mischen Sie keine Joins im ANSI-89-Stil und im ANSI-92-Stil. Sie haben unterschiedliche Priorität, was zu verwirrenden Fehlern führen kann, und genau das ist hier passiert. Ihre Abfrage wird wie folgt interpretiert:

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

Oben werden die Joins, die das JOIN-Schlüsselwort verwenden, zuerst ausgewertet, bevor der Komma-Join überhaupt berücksichtigt wird. An dieser Stelle die Tabelle p ist noch nicht deklariert.

Von MySQL Handbuch :

Der Vorrang des Kommaoperators ist jedoch geringer als bei INNER JOIN, CROSS JOIN, LEFT JOIN usw. Wenn Sie Komma-Joins mit den anderen Join-Typen mischen, wenn eine Join-Bedingung vorhanden ist, wird ein Fehler der Form Unbekannte Spalte 'Spaltenname' in 'On-Klausel' angezeigt kann auftreten. Informationen zum Umgang mit diesem Problem finden Sie weiter unten in diesem Abschnitt.

Ich würde es immer empfehlen Verwenden von Joins im ANSI-92-Stil, d. h. Verwenden des JOIN-Schlüsselworts:

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

Verwandte: