首頁 > 資料庫 > mysql教程 > 為什麼 MySQL 在混合連線語法時會拋出「ON 子句中的未知欄位」錯誤?

為什麼 MySQL 在混合連線語法時會拋出「ON 子句中的未知欄位」錯誤?

Mary-Kate Olsen
發布: 2025-01-13 06:48:42
原創
921 人瀏覽過

Why Does MySQL Throw an

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板