让第二个表与第三个左连接构成一个子查询,然后它与第一个表左连接
表定义: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

解决方案 »

  1.   


    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
      

  2.   

    --没有问题,是正确的,不过还是标准的写法更条理一些select * 
    from temp6 
         left join temp7 on temp6.age=temp7.age
         left join temp8 on temp7.age=temp8.age2 
       
      

  3.   

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

  4.   

    to dawugui:
      为什么要先做个子查询?效率高?
      

  5.   

    fxbird(昨天晚上我可能死了) ( ) 信誉:100    Blog  2007-03-26 13:05:14  得分: 0  
     
     
       to coolingpipe:
      你这样写不是把temp8左连接到temp6,而不是temp7上了吗?我想左连到7上。
      
     
    ------------他寫的沒有錯,因為關聯條件是on temp7.age=temp8.age2 ,沒有問題的。
      

  6.   

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

  7.   

    to paoluo:
      关联条件能决定是左连接到哪?
      

  8.   

    这个貌似没什么关系的。就像a+b+c 与a+(b+c)其实结果一样的
      

  9.   

    to coolingpipe:
      那你能否分析一下,本例才是怎么连接的?内部机制我还是不太明白,只左连一个比较容易理解,左连2个,第二个是如何被附加到结果里的,今天又做了一个,子连接有2个连接字段,其中一个还要和最外层的表关联,因为对原理不明白,写得晕头转向的。