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>
其他注意事項
請注意,修改後的查詢假設 m
和 t
之間是交叉連接,因為您沒有指定任何條件。如有必要,您可能需要修改查詢以包含適當的連線條件。 我加入了一個假設的連接條件 ON m.id = t.member_id
作為範例,你需要根據實際的資料庫表結構修改這個條件。
以上是為什麼在 MySQL 查詢中混合 ANSI 1992 JOIN 和逗號會導致「未知列」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!