使用左连接与多个表的位置

时间:2017-11-26 20:06:06

标签: mysql join

我有一个MySQL查询,看起来像这样:

Select * from T1,T2,T3
where t1.pk1 = t2.pk2
and t2.pk3 = t3.pk4

我需要使用左连接将上述结果集与另一个表T4连接(我需要来自上述查询的完整结果集,但只需要来自表T4的现有记录)。我试过这个:

Select * from t1,t2,t3
left join t4
on t1.pk5 = t4.pk6 
where t1.pk1 = t2.pk2
and t2.pk3 = t3.pk4

但它没有用......有人可以帮助解决语义问题吗?

1 个答案:

答案 0 :(得分:1)

不要混合使用显式和隐式JOIN

如果您需要完全匹配,则必须使用INNER JOIN ..如果您不总是精确数学,则必须使用LEFT JOIN

请记住,使用与左连接表相关的colums在哪里等同于INNER JOIN所以

所以你的查询应该等同于

Select t1.* , t2.*, t3.*, t4.*
from t1
INNER JOIN t2 ON t1.pk1 = t2.pk2
INNER JOIN t3 ON t2.pk3 = t3.pk4
left join t4 on t1.pk5 = t4.pk6 

如果你没有预期的结果可能是你需要另一个INNER JOIN for t4

Select t1.* , t2.*, t3.*, t4.*
from t1
INNER JOIN t2 ON t1.pk1 = t2.pk2
INNER JOIN t3 ON t2.pk3 = t3.pk4
INNER JOIN t4 on t1.pk5 = t4.pk6