首页 > 数据库 > mysql教程 > 为什么在 MySQL 中混合使用 ANSI JOIN 和逗号分隔表会导致'未知列”错误?

为什么在 MySQL 中混合使用 ANSI JOIN 和逗号分隔表会导致'未知列”错误?

Linda Hamilton
发布: 2025-01-09 10:57:41
原创
499 人浏览过

Why Does Mixing ANSI JOINs and Comma-Separated Tables in MySQL Lead to

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板