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中文网其他相关文章!