MySQL「未知列」錯誤:了解連線語法衝突
MySQL 的「『on 子句』中的未知欄位『p.id』」錯誤通常是由於連接語法的使用不一致而引起的。 這種歧義源自於 ANSI-89 和 ANSI-92 連接樣式之間的差異。
ANSI-89 使用逗號來定義連接,而 ANSI-92 使用明確 JOIN
關鍵字。 混合這些樣式會導致解析錯誤。 原始查詢錯誤地組合了兩者,導致 MySQL 首先解釋 ANSI-92 連接。 因此,在連接條件的 ANSI-89 部分中引用表“p”時,無法辨識。
解決方案是保持一致性。 始終使用 ANSI-92 語法消除了優先順序問題並提高了查詢可讀性。
這是使用一致的 ANSI-92 語法的更正查詢:
<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>
這種方法透過避免語法衝突來確保查詢的順利執行。 為了清晰起見並防止錯誤,請始終使用明確的 JOIN
關鍵字。
以上是為什麼 MySQL 在混合連線語法時會拋出「ON 子句中的未知欄位」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!