首頁 >資料庫 >mysql教程 >為什麼 MySQL 在混合連線樣式時會拋出「ON 子句中的未知列」?

為什麼 MySQL 在混合連線樣式時會拋出「ON 子句中的未知列」?

Susan Sarandon
Susan Sarandon原創
2025-01-13 06:43:43751瀏覽

Why Does MySQL Throw

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn