请改用以下语法:
SELECT *
FROM tableOne t1
INNER JOIN tableTwo t2 ON t2.id = t1.fk_tableTwo
LEFT JOIN N_N_tableThree t3 ON t2.id = t3.fk_tableTwo
INNER JOIN tableFour t4 ON t4.id = t3.fk_tableFour;
这将等效于第二个查询.
因为第二个查询中的WHERE t2.id = t1.tableTwo_id实际上是一个INNER JOIN1,它将和INNER JOIN tableTwo一样,就像我所做的那样.t2 ON t2.id = t1.fk_tableTwo.这是旧的JOIN语法,请尽量避免使用它,而应像我一样使用ANSI SQL-92语法.有关更多信息,请参见:
您发布的查询不起作用,因为它不是MySQL中JOIN的正确语法,彼此之间有三个ON子句:
...
ON t4.id = t3.fk_tableFour
ON t2.id = t3.fk_tableTwo
ON t2.id = t1.fk_tableTwo
每个JOIN都应具有直接在JOIN之后的ON子句指定的连接条件,如果不是,则为交叉join2.但是您执行的方式并不是多次ON.
1:不要与使用INNER JOIN而不是JOIN混淆,它们与默认JOIN是内部联接是相同的,我只是出于可读性考虑.另外,与OUTER关键字相同,我在LEFT JOIN中省略了它,因为在使用LEFT或RIGHT时它是可选的
2:您会在参考页中找到MySQL中JOIN语法的其他变体,例如没有连接条件的JOIN表名,以及其他.您可能需要阅读它们.