MySQL 中逗号 (,) 的优先级低于 xxx join

来源 MySQL 5.7 官方文档之 join 语法:MySQL 5.7 Reference Manual / … / JOIN Clause

The same precedence interpretation also applies to statements that mix the comma operator with INNER JOIN, CROSS JOIN, LEFT JOIN, and RIGHT JOIN, all of which have higher precedence than the comma operator.


谷歌翻译:相同的优先级解释也适用于将逗号运算符与 INNER JOIN、CROSS JOIN、LEFT JOIN 和 RIGHT JOIN 混合使用的语句,所有这些 (xxx JOIN) 都具有比逗号 (,) 更高的优先级。

测试案例

CREATE TABLE t1 (i1 INT, j1 INT);
CREATE TABLE t2 (i2 INT, j2 INT);
CREATE TABLE t3 (i3 INT, j3 INT);
INSERT INTO t1 VALUES(1, 1);
INSERT INTO t2 VALUES(1, 1);
INSERT INTO t3 VALUES(1, 1);
SELECT * FROM t1, t2 JOIN t3 ON (t1.i1 = t3.i3);

执行结果

ERROR 1054 (42S22): Unknown column ‘t1.i1’ in ‘on clause’

这是因为join的优先级高于“,”,因此t2 join t3 on t1.i1 = t3.i3会找不到t1.i1

对此,可以通过添加括号来解决,但是一般不建议通过逗号 (,) 进行多表连接(可读性差、易出错)

SELECT * FROM (t1, t2) JOIN t3 ON (t1.i1 = t3.i3);
  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值