日期:2014-05-19  浏览次数:20483 次

2个左连接的写法问题
让第二个表与第三个左连接构成一个子查询,然后它与第一个表左连接
表定义:temp6(id,age),temp7(age,age2),temp8(age2,name)
temp6是主表,age是整形字段
下面是我上次问得到的答案,但有点麻烦,因为每次都要子查询
select   temp6.*,t.*   from   temp6
left   join  
(
select   temp7.*,temp8.name   from   temp7   left   join   temp8   on   temp7.age2   =   temp8.age2
)   T
on   temp6.age   =   T.age

今天我试了一下这么写,结果一样,但不知对不对,敬请指教 :
select   *   from   temp6  
      left   join   temp7  
left   join   temp8
on   temp7.age=temp8.age2  
      on   temp6.age=temp7.age

------解决方案--------------------

select a1.col , t.col from a1
left join
(
select a2.col , a3.col from a2 left join a3 on a2.id = a3.id
) t
on a1.id = t.id
------解决方案--------------------
--没有问题,是正确的,不过还是标准的写法更条理一些

select *
from temp6
left join temp7 on temp6.age=temp7.age
left join temp8 on temp7.age=temp8.age2


------解决方案--------------------
fxbird(昨天晚上我可能死了) ( ) 信誉:100 Blog 2007-03-26 13:05:14 得分: 0


to coolingpipe:
你这样写不是把temp8左连接到temp6,而不是temp7上了吗?我想左连到7上。


------------

他寫的沒有錯,因為關聯條件是on temp7.age=temp8.age2 ,沒有問題的。
------解决方案--------------------
select *
from temp6 a
left join temp7 b on a.age=b.age
left join temp8 c on a.age=c.age2

------解决方案--------------------
对的吧
------解决方案--------------------
这个貌似没什么关系的。就像a+b+c 与a+(b+c)其实结果一样的