环境:SQL2005
问题描述:
3表联查,组合3表字段,去掉重复字段,重新显示数据。试图显示。
具体实现:
table1列:a,b,c,d
table2列:a,e,f
table3列:b,c,g,h
每个表都有数据。
显示结果:
a      b     c     d      e     f      g       h
x      x     x     x      null  null   null    null
x      null  null  null   x     x      null    null
null   x     x     null   null  null   x       x谢谢,高分求问。。结贴追加分。

解决方案 »

  1.   

    declare  @t1 table(a nvarchar(10),b nvarchar(10),c nvarchar(10),d nvarchar(10))
    declare  @t2 table(a nvarchar(10),e nvarchar(10),f nvarchar(10))
    declare  @t3 table(b nvarchar(10),c nvarchar(10),g nvarchar(10),h nvarchar(10))
    insert @t1
    select '1','2','3','4'
    union all
    select '2','1','3','4'
    union all
    select '3','2','3','4'
    insert @t2
    select '1','2','3' 
    union all
    select '2','1','3'
    insert @t3
    select '2','3','4','1'
    union all
    select '2','1','3','4'
    union all
    select '3','2','3','4'select *  from
    @t1 t1
    full join @t2 t2 on t1.a = t2.a
    full join @t3 t3 on t1.b= t3.b and t1.c= t3.c
    /*
    a          b          c          d          a          e          f          b          c          g          h
    ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
    1          2          3          4          1          2          3          2          3          4          1
    2          1          3          4          2          1          3          NULL       NULL       NULL       NULL
    3          2          3          4          NULL       NULL       NULL       2          3          4          1
    NULL       NULL       NULL       NULL       NULL       NULL       NULL       2          1          3          4
    NULL       NULL       NULL       NULL       NULL       NULL       NULL       3          2          3          4
    */
    吃饭了....
      

  2.   

    select a.* , e , f , g , h
    from table1 a ,table2 b, table3 c
    where a.a = b.a and a.b = c.b and a.c = c.cselect m.* , g, h from
    (select a.* , e , f from table1 a ,table2 b where a.a = b.a) m , table3 c
    where m.b = c.b and m.c = c.c
    最好给出完整的表结构,测试数据,计算方法和正确结果.发帖注意事项
    http://topic.csdn.net/u/20091130/21/fb718680-98ff-4afb-98d8-cff2f8293ed5.html?24281
      

  3.   

    看错了 原来是列 
    看来用full join
      

  4.   

    full jion 只能实现一半功能,如果3表列的字段名有一样的,我只要显示一列,而且数据还是合并进去。。
      

  5.   

    table1有a列,table2也有a列,最后显示只能有一个a列,数据显示在a列里。
      

  6.   

    数据:
    table1有a列:
    1
    2
    3
    table2也有a列:
    4
    5
    6
    想要a列的结果?
      

  7.   

    是3个表所有的结果集。
    select * from table1
    列  :a   b   c    d
    数据:1   2   3    4
    select * from table2
    列 : a   e   f
    数据:5   6   7
    select * from table3
    列:  b   c   g   h
    数据:8   9   10  0最后要的结果是a    b    c     d      e      f      g      h
    1    2    3     4     null   null   null   null
    5   null null  null    6      7     null   null
    null 8    9     null   null  null    10     0
      

  8.   

    如果两列中的a栏都有值怎么办啦?
    如果没有值的情况下使用ISNULL就可以了.declare  @t1 table(a nvarchar(10),b nvarchar(10),c nvarchar(10),d nvarchar(10))
    declare  @t2 table(a nvarchar(10),e nvarchar(10),f nvarchar(10))
    declare  @t3 table(b nvarchar(10),c nvarchar(10),g nvarchar(10),h nvarchar(10))
    insert @t1
    select '1','2','3','4'
    insert @t2
    select '5','6','7' 
    insert @t3
    select '8','9','10','0'select ISNULL(t1.a,t2.a) a, ISNULL(t1.b,t3.b) b ,ISNULL(t1.c,t3.c) c,d,e,f,g,h  from
    @t1 t1
    full join @t2 t2 on t1.a = t2.a
    full join @t3 t3 on t1.b= t3.b and t1.c= t3.c
    /*
    a          b          c          d          e          f          g          h
    ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
    1          2          3          4          NULL       NULL       NULL       NULL
    5          NULL       NULL       NULL       6          7          NULL       NULL
    NULL       8          9          NULL       NULL       NULL       10         0
    */