sql >> Databasteknik >  >> RDS >> Mysql

MySQL okänd kolumn i ON-klausul

Blanda inte ANSI-89 style och ANSI-92 style joins. De har olika företräde vilket kan leda till förvirrande fel, och det är vad som har hänt här. Din fråga tolkas enligt följande:

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

I det ovanstående utvärderas de sammanfogningar som använder nyckelordet JOIN först innan en komma-liknande sammanfogning övervägs. Vid den tidpunkten tabellen p är ännu inte deklarerad.

Från MySQL handbok :

Dock är företrädet för kommatecken mindre än för INNER JOIN, CROSS JOIN, LEFT JOIN, och så vidare. Om du blandar komma-kopplingar med de andra kopplingstyperna när det finns ett kopplingsvillkor, ett fel av formen Okänd kolumn 'kol_namn' i 'on-sats' kan inträffa. Information om hur du hanterar detta problem ges längre fram i det här avsnittet.

Jag skulle rekommendera alltid använder ANSI-92 style joins, d.v.s. använder JOIN-nyckelordet:

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

Relaterat:



  1. Hur man hittar antalet dagar mellan två datum i MySQL

  2. Kontrollera om sekvensen finns i Postgres (plpgsql)

  3. Enradsfunktioner i Oracle sql

  4. i postgres, kan du ställa in standardformateringen för en tidsstämpel, efter session eller globalt?