MySQL “Unknown Column in ON Clause” 錯誤:連接順序混淆詳解
在MySQL中遇到「#1054 - Unknown column 'p.id' in 'on clause'」錯誤時,關鍵在於理解查詢中混合使用ANSI-89和ANSI-92風格連接的潛在問題。預設情況下,MySQL根據連接的優先權來評估連接,這在未明確指定連接順序的情況下可能會導致混淆。
錯誤的查詢中,MySQL會按照以下方式解釋查詢,其中逗號風格的連接在JOIN關鍵字連接之後進行評估:
<code class="language-sql">FROM property p, ( propertygeometry pg JOIN shortlist sl ON sl.PropertyID = p.id AND sl.MemberID = 384216 ... )</code>
此時,MySQL認為表格「p」尚未聲明,導致「未知列」錯誤。
為了避免這種混淆,建議在整個查詢中始終使用ANSI-92風格的連接,即使用JOIN關鍵字:
<code class="language-sql">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</code>
透過這種方法,連接順序清晰明了,從而避免了令人困惑的錯誤訊息。
以上是為什麼 MySQL 在混合連線樣式時會拋出「ON 子句中的未知列」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!