补充:表2和表3中的id1都是对应表1中的id1

解决方案 »

  1.   

    把JOIN 换成 LEFT JOIN 呢?
      

  2.   

    select 
      t1.name1,t2.name2,t3.name3
    from 
      t1 left join t2 on t1.id1=t2.id1
      left join t3 on t1.id1=t3.id1
      

  3.   

    right join
    left join
    inner join
    cross join
    用来用去都搞不定
    现在的想法是这样的,还没实践,不知道行不行:
    建一临时表table4,先连接t1,t2表,得:
       t1.name1  t2.name2  t3.name3   temp
    -----------------------------------
       t1name1  t2name21               0
       t1name1  t2name22               0  
       t1name1  t2name23               0
       t1name1  t2name24               0   
       t1name2  t2name25               0
       t1name2  t2name26               0
       t1name2  t2name27               0
    注:temp用来标识该行是否已被使用,以下步骤有用然后用t3的值更新table4,对于t3.id1=1,把t3.t3name*的值更新到table4中temp值为0、t1.name值为t1name1的t3.nmame列中,并把temp值改为0,   t1.name1  t2.name2  t3.name3  temp
    -----------------------------------
       t1name1  t2name21  t3name31    1
       t1name1  t2name22  t3name32    1
       t1name1  t2name23  t3name33    1
       t1name1  t2name24              0
       t1name2  t2name25  t3name34    1
       t1name2  t2name26  t3name35    1
       t1name2  t2name27  t3name36    1若已无temp为0的,则添加一行 :
    (上例中需要得到的结果最后一行是这种情况)
       t1.name1  t2.name2  t3.name3   temp
    --------------------------------------
        t1name2            t3name37    1
    最后得到
    t1.name1  t2.name2  t3.name3     temp
    -----------------------------------
       t1name1  t2name21  t3name31    1
       t1name1  t2name22  t3name32    1
       t1name1  t2name23  t3name33    1
       t1name1  t2name24              0
       t1name2  t2name25  t3name34    1
       t1name2  t2name26  t3name35    1
       t1name2  t2name27  t3name36    1
       t1name2            t3name37    1
    做法很土,理论上应该可以,昨晚边睡边想的,还没实践,现在先上班了
    希望有高手教个简单的办法:)
       
      

  4.   

    /*create procedure winer ascreate table #table4(id4 int,id1 int, name4 char(10))
    insert into #table4
    select ab.id2,ab.uu,name3 
    from table3 right join
    (select table2.id1 as uu,table2.id2 as id2  from table2 where id1=1)ab
    on table3.id1=ab.uu and table3.id3=ab.id2 create table #table5(id5 int,id1 int, name5 char(10))
    insert into #table5
    select ab.uu,ab.id3,ab.name3 from table2 right join
    (select table3.id1 as uu,table3.id3 as id3 
    ,table3.name3
     from table3 where id1=2)ab
    on table2.id2=ab.id3 create table #table6(id6 int,id1 int,name6 char(10))
    insert into #table6 select *from #table4
    insert into #table6(id6,id1,name6) select id1,id5,name5 from #table5update #table6 set id6=id6+1 from #table6
    where id1=2select name1,ab.name2,ab.name3 from table1 right join(
    select #table6.id1 as uu,table2.name2,#table6.name6 as name3 
    from #table6 left join table2
    on #table6.id6=table2.id2)ab
    on table1.id=ab.uu
    */
    execute winer