首頁 >資料庫 >mysql教程 >為什麼在 MySQL 查詢中混合 ANSI 1992 JOIN 和逗號會導致「未知列」錯誤?

為什麼在 MySQL 查詢中混合 ANSI 1992 JOIN 和逗號會導致「未知列」錯誤?

Linda Hamilton
Linda Hamilton原創
2025-01-09 11:06:41792瀏覽

Why Does Mixing ANSI 1992 JOINs and Commas in MySQL Queries Cause

MySQL 查詢中混合使用 ANSI 1992 JOIN 和逗號導致的問題

在 MySQL 查詢中,如果同時使用 ANSI 1992 JOIN 語法和逗號分隔的表連接語法,可能會出現 "Unknown column 'm.id' in 'on clause'" 的錯誤。這是因為混合使用這兩種語法會導致查詢語法歧義。

問題解決方法

根據 MySQL 文檔,不建議混合使用基於逗號的表連接語法(例如,members as m, telephone as t)和明確的 JOIN 子句。要解決這個問題,請將逗號替換為 CROSS/INNER/LEFT JOIN 語句。

原因解釋

以前,逗號運算子和 JOIN 具有相同的優先權,但在較新的 MySQL 版本中,JOIN 的優先權較高。因此,逗號運算子不再優先於 JOIN 子句。這表示查詢解釋器會錯誤地分離操作數,從而導致 ON 子句中的錯誤。

修改後的查詢

為了修正語法,請使用明確的 JOIN 子句重寫查詢:

<code class="language-sql">SELECT m.*, t.*
FROM memebers AS m
JOIN telephone AS t ON m.id = t.member_id  -- 添加连接条件
JOIN memeberFunctions AS mf ON m.id = mf.memeber AND mf.function = 32
JOIN mitgliedTelephone AS mt ON m.id = mt.memeber;</code>

其他注意事項

請注意,修改後的查詢假設 mt 之間是交叉連接,因為您沒有指定任何條件。如有必要,您可能需要修改查詢以包含適當的連線條件。 我加入了一個假設的連接條件 ON m.id = t.member_id 作為範例,你需要根據實際的資料庫表結構修改這個條件。

以上是為什麼在 MySQL 查詢中混合 ANSI 1992 JOIN 和逗號會導致「未知列」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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