我有两个表的结构和数据如下:
表一:
订单号    产品编号   物料编号   库存数
0001       1254       11212       0
0001       1254       11213       0
0001       1254       11257       0表二:
订单号    产品编号   物料编号   库存数
0001       1254       11212       9
0001       1254       11213       50我想要的结果是:
用一条查询语句得到如下结果订单号    产品编号   物料编号   库存数
0001       1254       11212       9
0001       1254       11213       50
0001       1254       11257       0
即,以订单号,产品编号,物料编号为关键字,用表二的库存去更新表一的库存数,表二中不存在的数据表一的库存数自动为0.
请教哪位高人,这句查询SQL应该如何写,怎么写速度更快???

解决方案 »

  1.   

    update 表一 set 库存数 =(select t.库存数 from 表二 t 
     where t.订单号=表一.订单号 and t.产品编号=表一.产品编号  
           and t.物料编号=表一.物料编号)
      

  2.   

    Select a.订单号,a.产品编号,a.物料编号,
           nvl(b.库存数,0) as 库存数
     from 表一 a Left Join 表二 b on
          a.订单号=b.订单号 and a.产品编号=b.产品编号  
         and a.物料编号=b.物料编号 
      

  3.   

    标题我写错了,我希望用SELECT查询得到第三个表,不知道应该如何写,在查询过程中,如果表二在表一中没有的数据,自动将库存显示为0!  谢谢了!
      

  4.   

    SQL> select t1.orderId,
      2         t1.proId,
      3         t1.matId,
      4         nvl(t2.mount,0) as mount
      5    from (select '0001' as orderId,'1254' as proId,'11212' as matId,0 as mount from dual
      6          union all
      7          select '0001' as orderId,'1254' as proId,'11213' as matId,0 as mount from dual
      8          union all
      9          select '0001' as orderId,'1254' as proId,'11257' as matId,0 as mount from dual
     10         )t1,
     11         (
     12          select '0001' as orderId,'1254' as proId,'11212' as matId,9 as mount from dual
     13          union all
     14          select '0001' as orderId,'1254' as proId,'11213' as matId,50 as mount from dual
     15         )t2
     16   where t1.orderId = t2.orderId(+)
     17     and t1.proId = t2.proId(+)
     18     and t1.matId = t2.matId(+);
    ORDERID PROID MATID      MOUNT
    ------- ----- ----- ----------
    0001    1254  11212          9
    0001    1254  11213         50
    0001    1254  11257          0
      

  5.   

    Select a.订单号,a.产品编号,a.物料编号,
           nvl(b.库存数,0) as 库存数
     from 表一 a Left Join 表二 b on
          a.订单号=b.订单号 and a.产品编号=b.产品编号  
         and a.物料编号=b.物料编号 
    这条语句比较简洁,用到了左连接,也能很好的实现楼主的功能,不过第二种方法太复杂也不实用,假如:订单号    产品编号   物料编号   在一个表中每一天纪录都不相同了。
      

  6.   

    左连接是一个好方法,但是发现ORACLE9之前的版本对左右连接不是很支持的来说。左连接后的列数是原来的(A表的列数+B表的列数)
    表一:                  表二:
    订单号    产品编号   物料编号   库存数  订单号    产品编号   物料编号   库存数
    0001       1254       11212       0    0001       1254       11212       9
    0001       1254       11213       0    0001       1254       11213       50
    0001       1254       11257       0    0001       1254       11213       50 
    0001       1254       11212       0    0001       1254       11213       50
    0001       1254       11213       0    0001       1254       11213       50
    0001       1254       11257       0    0001       1254       11213       50如果是A表更新B表,用UPDATE就足够解决问题(如二楼),不考虑执行速度),
    如果是A表和B表查询得出C表,如楼上,
      

  7.   

    1.先union all
    2.group by 订单号,产品编号