表A 如下
bianhao   leixing  shuliang
11         1         3
11         2         4
11         3         6
12         3         2
13         2         2
13         3         3
表B 如下
bianhao   leixing  shuliang
11         1         2
11         2         4
11         3         6
13         3         1
=====================================
从 bianhao和leixing两个字段看,B表的数据是A表的子集,现在想实现联合查询,查询结果为如果A表中某记录的bianhao和leixing两个字段同B表中的相同,则shuliang为A.shuliang-B.shuliang,否则保留为A的shuliang显示出来
我用select A.bianhao,A.leixing,A.shuliang-B.shuliang from A,B where A.bianhao=B.bianhao(+) and A.leixing=B.leixing(+),[/color]查出来的结果是B中不存在但A中存在的记录的shuliang字段变成空了,要怎么才能查询啊正确结果应该是bianhao   leixing  shuliang
11         1         [color=#FF0000]1

11         2         0
11         3         0
12         3         2
13         2         2
13         3         2

解决方案 »

  1.   

    另外,有没有办法实现对B表进行扩充,要求B表的数据和A表一样多(shuliang字段不同,B表中原来没有的记录shuliang字段都填0),这样产生个新的查询C 再同A联合查询就好多了,有这样的实现吗
      

  2.   


    SQL> with a as(
      2       select 11 bianhao,1 leixing,3 shuliang from dual union all
      3       select 11,2,4 from dual union all
      4       select 11,3,6 from dual union all
      5       select 12,3,2 from dual union all
      6       select 13,2,2 from dual union all
      7       select 13,3,3 from dual)
      8  ,b as(
      9     select 11 bianhao,1 leixing,2 shuliang from dual union all
     10     select 11,2,4 from dual union all
     11     select 11,3,6 from dual union all
     12     select 13,3,1 from dual)
     13  select a.bianhao,a.leixing,nvl((a.shuliang-b.shuliang),a.shuliang) shulaing
     14  from a,b
     15  where a.bianhao=b.bianhao(+)
     16    and a.leixing=b.leixing(+)
     17  order by a.bianhao
     18  /
     
       BIANHAO    LEIXING   SHULAING
    ---------- ---------- ----------
            11          1          1
            11          2          0
            11          3          0
            12          3          2
            13          3          2
            13          2          2
      

  3.   

    形如A表:
    ID B_NO TOTAL
    1 4001 3
    2 4001 3
    3 4001 5
    4 4001 7
    2 4021 4
    3 4033 9
    通过select distinct ID from A 可以得到ID值有1、2、3、4四种;
    通过select distinct B_NO from A 可以得到B_NO值有4001、4021、4033三种;
    现在想通过怎么操作,实现查询结果如下:
    ID B_NO TOTAL
    1 4001 3
    2 4001 3
    3 4001 5
    4 4001 71 4021 0
    2 4021 4
    3 4021 0
    4 4021 01 4033 0
    2 4033 0
    3 4033 9
    4 4033 0
    即对4021、4033按照ID扩展,TOTAL填值为0
      

  4.   

    union all或union具体看是否去掉重复的行。