来源 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);