mysql n 1_连接N-1和N-N的mySQL嵌套

请改用以下语法:

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表名,以及其他.您可能需要阅读它们.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值