MySQL 查詢中混合使用 ANSI JOIN 和逗號分隔表的問題
在 MySQL 查詢中混合使用 ANSI JOIN 語法(INNER JOIN、CROSS JOIN、LEFT JOIN)和逗號分隔的表格引用時,可能會遇到「Unknown column」錯誤。此錯誤是因為 MySQL 對逗號運算子的解釋取決於其位置。
問題:
考慮以下查詢:
<code class="language-sql">SELECT m.*, t.* FROM memebers as m, telephone as t INNER JOIN memeberFunctions as mf ON m.id = mf.memeber INNER JOIN mitgliedTelephone as mt ON m.id = mt.memeber WHERE mf.function = 32</code>
此查詢會導致「Unknown column 'm.id' in 'on clause'」錯誤。
解決方法:
要解決此錯誤,請避免混合使用 ANSI JOIN 語法和逗號分隔的表。改為僅使用 ANSI JOIN 語法,如下面的修改後的查詢所示:
<code class="language-sql">SELECT m.*, t.* FROM memebers as m JOIN telephone as t ON 1=1 INNER JOIN memeberFunctions as mf ON m.id = mf.memeber AND mf.function = 32 INNER JOIN mitgliedTelephone as mt ON m.id = mt.memeber</code>
解釋:
MySQL 現在將查詢解釋為:
<code class="language-sql">((memembers as m JOIN telephone as t ON 1=1) INNER JOIN memeberFunctions as mf ON m.id = mf.memeber) INNER JOIN mitgliedTelephone as mt ON m.id = mt.memeber</code>
在此語法中,JOIN 子句的運算元已明確定義,而「m.id」列在 ON 子句中被正確引用。 增加ON 1=1
是為了保證JOIN
操作的正確性,因為JOIN
關鍵字需要ON
子句。
注意:
重要的是要注意,使用逗號分隔表不再被認為是 MySQL 的最佳實踐。建議使用 ANSI JOIN 語法以確保清晰度並避免潛在錯誤。
以上是為什麼在 MySQL 中混合使用 ANSI JOIN 和逗號分隔表會導致「未知列」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!