Combineer geen ANSI-89 stijl en ANSI-92 stijl joins. Ze hebben verschillende voorrang, wat kan leiden tot verwarrende fouten, en dat is wat hier is gebeurd. Uw vraag wordt als volgt geïnterpreteerd:
FROM property p, (
propertygeometry pg
JOIN shortlist sl ON sl.PropertyID = p.id AND sl.MemberID = 384216
...
)
In het bovenstaande worden de joins met het trefwoord JOIN eerst geëvalueerd voordat de join in kommastijl zelfs maar wordt overwogen. Op dat moment is de tabel p
is nog niet gedeclareerd.
Van de MySQL handleiding :
De prioriteit van de komma-operator is echter lager dan die van INNER JOIN, CROSS JOIN, LEFT JOIN, enzovoort. Als u komma-joins combineert met de andere join-typen wanneer er een join-voorwaarde is, een fout in de vorm Onbekende kolom 'col_name' in 'on-clausule' kan gebeuren. Informatie over het omgaan met dit probleem vindt u verderop in dit gedeelte.
Ik raad altijd aan met behulp van joins in ANSI-92-stijl, d.w.z. met behulp van het JOIN-sleutelwoord:
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
Gerelateerd: