select * from tb1 union select * from tb2;

解决方案 »

  1.   

    不好意思!刚才没说清楚
    请各位兄台赐教:oracle中的两个表的全联结查询语法怎么写?
    例如:
    表  tb1
    字段  A     B    C     D表  tb2
    字段  E     F    k     G其中tb1中的B字段与tb2中的K字段一样的,怎么写全联结语句?
    我要得到的结果是:
       A   B    C   D   G谢谢!
      

  2.   

    select tb1.A,tb1.B,tb1.C,tb1.D,tb2.G from tb1,tb2 where tb1.k=tb2.k;
      

  3.   

    select tb1.A,tb1.B,tb1.C,tb1.D,tb2.G from tb1,tb2 where tb1.k=tb2.k;
    那就不是全联结了!
    表  tb1
    字段  A     B    C     D
          1     a    sa    ab
          2     b    sa    cg
          3     c    pq    eg
          4     d    li    gy
          5     e    ki    cd
          6     f    gd    wq表  tb2
    字段  E     F    k     G
          3     45   a     3s
          user  79   d     6d
          pwd   ef   b     hj
          s9s   ud   g     32
          8s    91   k     3u
          js    os   f     js
          ks    0s   q     op 我要得到的结果是
          A     B    C     D       G
          1     a    sa    ab      3s
          2     b    sa    cg      hj
          3     c    pq    eg
          4     d    li    gy      6d
          5     e    ki    cd      
          6     f    gd    wq      js
                g                  32
                k                  3u
                q                  op
    用普通连接肯定不行,应该用全联结,可我用前面freddy2003() 大哥教的union老是出错,错误提示为:
    ORA-01789:查询块具有不正确的结果列数。
    请大哥们赐教!小弟先谢谢了谢谢
      

  4.   

    union要求两个表的数据结构一模一样呀!不行呀!请大家帮帮忙!
      

  5.   

    你的b和k是怎么样的对应关系?select tb1.A,tb1.B,tb1.C,tb1.D,tb2.G from tb1,tb2 where tb1.k=tb2.k;tb1.k=tb2.k;在少的那一列上加(+) 比如tb2.k中有些列的内容在tb1.k中没有,那么
    tb2.k=tb1.k(+)
      

  6.   

    B与K是一样的字段意义,只是里面的记录不一样多而已,比如B字段的记录有时侯多于K字段,有时侯少于K字段的记录,里面有相同的记录,也有不同的记录。K字段也是一样的,它们地位一样的。
    用做连接或右连接都会产生数据丢失。的不到我要的结果呀,这个是做统计用的系统设计。
    比如中国联通的各个营业厅(比如B字段)做卖号(比如D字段)为tb1,tb2为营业厅编号(比如K字段)和收费统计(比如我要的G字段)
    好比:
    表tb1                                   表tb2
        营业厅编号(B)    卖C网号个数       营业厅编号(K)       一天营业额(G)  
         123                 25                 123                    3287.00
         124                 32                 125                    5975.00
         125                 78                 126                   10888.00
         127                 12                 130                     730.00
         129                 108                178                    3250.00我要根据以上两个表统计出这个结果:总不能他卖了号,而没有营业额(话费收缴)就不统计吧,或者是他只收了话费而没有卖出号码就也把他丢了吧!我试了,用左连接或右连接都会导致数据丢失,就是上面说的两种丢弃。
         营业厅编号(B)    卖C网号个数              一天营业额(G)
           123                 25                        3287.00
           124                 32  
           125                 78                        5975.00
           126                                           10888.00
           127                 12 
           129                 108 
           130                                             730.00
           178                                            3250.00
      

  7.   

    使用full join
    select * from a full join b on a.f1 = b.f1
      

  8.   

    full join结果出来了
    也不是我要的结果呀!
    就得出了营业额呀
    卖号没有了
      

  9.   

    select tb1.A,tb1.B,tb1.C,tb1.D,tb2.G from tb1 full outer join tb2 on tb1.b=tb2.k;
      

  10.   

    也不知道你的oracle版本是多少.  呵呵...
      

  11.   

    不是吧,并不需要字段名成都是一样的.
    SELECT * FROM TAB1 UNION (SELECT * FROM TAB2)ORACLE的文档上面说,他是以第一个查询输出的记录集字段的先后顺序,依据它们的字段类型和第2个查询输出的记录集字段的类型,如果需要转换则先转换,然后再进行值比较的.我觉得应该是这样写.
    SELECT tb1.a,tb1.b,tb1.c,tb1.d,tb2.g from tb1 where tb1.b exists in (select tb1.b from tb1 union all select tb2.k from tb2);