我不明白为什么这个查询有效以及它的实际含义。应该注意的是,此查询在使用 PDO 时有效,但不适用于 Mysql cli 甚至 phpmyadmin。
SELECT table1.something, table2.something
FROM someTable
LEFT JOIN table 1
INNER JOIN table2
ON table2.table1_id = table1.id
ON table1.account_id = someTable.account_id
没有抛出任何错误,更奇怪的是,我得到的结果实际上与查询应该执行的操作一致。
最佳答案
这是有效的 SQL 语法,假设您刚刚从 FROM
子句中提取了一个片段。它被解释为:
SELECT table1.something, table2.something
FROM someTable
LEFT JOIN
(table1 INNER JOIN
table2 bbm
ON table2.table1_id = table1.id
)
ON table1.account_id = table2.account_id
也就是说,这真的很神秘,因为别名将 table2
重命名为 bbm
,但未使用。 ON
条件仅指较早的表。结果是一些奇怪的 CROSS JOIN
形式。
在我看来,以这种方式嵌套 JOIN
应该仅仅被视为一种娱乐。不要嵌套 JOIN
。在下一个表/子查询引用之前,每个 JOIN
都应该跟在它自己的 ON
子句之后。嵌套连接使代码更难理解。它可能会引入错误(我认为在这种情况下发生过)。也可能存在微妙的边缘情况,在这些情况下,要弄清楚正在发生的事情有点困难。
关于mysql - 为什么这个 "nested join"适用于 PDO 但不适用于 MySql cli?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54094672/