我有一个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
但它没有用......有人可以帮助解决语义问题吗?
答案 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