连接N-1和N-N的mySQL嵌套

连接N-1和N-N的mySQL嵌套,mysql,join,syntax,left-join,Mysql,Join,Syntax,Left Join,我正在尝试连接4个表,两个1-N表,一个通过一个N-N表。奇怪的是,mySql似乎不喜欢我的语法之一。有人知道这是由于myOwn限制还是mySql造成的吗 这不起作用: SELECT * FROM tableOne t1 JOIN tableTwo t2 LEFT OUTER JOIN N_N_tableThree t3 JOIN tableFour t4 ON t4.id = t3.fk_tableFour ON t2.id = t3.fk_

我正在尝试连接4个表,两个1-N表,一个通过一个N-N表。奇怪的是,mySql似乎不喜欢我的语法之一。有人知道这是由于myOwn限制还是mySql造成的吗

这不起作用:

SELECT *
FROM tableOne t1 JOIN tableTwo t2 
    LEFT OUTER JOIN N_N_tableThree t3 
            JOIN tableFour t4 ON t4.id = t3.fk_tableFour
        ON t2.id = t3.fk_tableTwo
    ON t2.id = t1.fk_tableTwo
虽然这确实有效

SELECT *
FROM tableOne t1,
tableTwo t2 LEFT OUTER JOIN N_N_tableThree t3 
        JOIN tableFour t4 ON t4.id = t3.tableFour_id
    ON t2.id = t3.tableTwo_id
WHERE t2.id = t1.tableTwo_id
有人知道线索吗


感谢您的回答。

请改用以下语法:

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;
这将相当于第二个有效的查询

因为第二个查询中的
其中t2.id=t1.tableTwo\u id
实际上是一个
内部联接
1,它将与t2.id=t1.fk\u tableTwo
上的
内部联接tableTwo t2相同。这是旧的
JOIN
语法,请尽量避免使用它,并像我一样使用ANSI SQL-92语法。有关更多信息,请参见:

您发布的查询不起作用,因为它不是MySQL中的正确语法,在每个子句后面都有三个
ON
子句:

...
ON t4.id = t3.fk_tableFour
ON t2.id = t3.fk_tableTwo
ON t2.id = t1.fk_tableTwo
每个
JOIN
都应该在
JOIN
之后直接使用
ON
子句指定连接条件,否则将是交叉连接2。但不是像你那样在
上有多个


1:不要与使用
内部连接而不是
连接混淆,它们是相同的默认
连接是内部连接,我只是为了可读性。同样,对于
OUTER
关键字,我在
LEFT JOIN
中省略了它,因为在使用
LEFT
RIGHT
时它是可选的


2:您将在参考页面中找到MySQL中的
JOIN
语法的其他变体,如没有连接条件的
JOIN tablename
等。你可能需要阅读它们

啊,好吧,这很有帮助。您刚刚让我了解了“新”SQL语法。我的大部分申请(和我自己)都在旧的申请中。。。。但这很有道理。感谢您的努力和有用的链接!好的,但我还有一个问题。我正在调查这件事,但还有一个问题。如果您有一个包含三个FK的N-N表怎么办@user1976489您能解释一下此表与包含这三个FK的其他表的关系吗?这是可能的,您可以使用不同的别名多次
JOIN
此表,也可以在同一
on
上指定多个条件作为
JOIN
条件。请随意编辑您的问题,用表格结构解释这一点,以及您正在尝试做什么,这样我就可以清楚地理解它,其他用户也可以提供帮助。