ANSI-89スタイルとANSI-92スタイルの結合を混在させないでください。それらは、紛らわしいエラーにつながる可能性のある異なる優先順位を持っており、それがここで起こったことです。クエリは次のように解釈されます:
FROM property p, (
propertygeometry pg
JOIN shortlist sl ON sl.PropertyID = p.id AND sl.MemberID = 384216
...
)
上記では、JOINキーワードを使用した結合は、コンマスタイルの結合が考慮される前に最初に評価されます。その時点で、テーブルp
まだ宣言されていません。
ただし、コンマ演算子の優先順位は、INNER JOIN、CROSS JOIN、LEFTJOINなどよりも低くなります。結合条件があるときに他の結合タイプとコンマ結合を混在させると、「on句」の不明な列「col_name」の形式のエラー 発生する可能性があります。この問題への対処に関する情報は、このセクションの後半に記載されています。
常にをお勧めします ANSI-92スタイルの結合を使用する、つまり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
関連: