请教各位大哥。有两个表,表a(id,字段a),表b(id,字段b)
表a中字段a,表b中字段b都是数字型表a的id和表b的id有对应关系,现在想把表b中的字段b加到表a的字段a中,id相同就相加到a表中。
想打到的效果是:
表a:
id      字段a
1      12
2      13
3      11
4      14
表b:
id      字段b
1      12
2      13
3      11
更新后表a为:
表a:
id      字段a
1      24
2      26
3      22
4      14
我是新手,请各位高手帮忙,写这样一个sql,另外对于500w数量级的数据做这样的操作,需要多长时间。谢谢各位大哥。

解决方案 »

  1.   

    我觉得这种更新比较大数据量的情况不要直接用update语句。
    将A表rename成C表,然后用C表,和B表生成A表,后再建索引;
    将B中有的id数据,A表中没有的id数据合并在一起;1: alter table A rename to C;
    2: create table A
    as
    select C.id id, C.字段a+nvl(B.字段b, 0) 字段a
    from C, B where c.id=b.id(+)
    union all
    select B.id id, B.字段b 字段a
    from B,(select id from B minus
            select id from A) X
    where b.id=x.id;
    3:创建A表的索引。
      

  2.   

    update a
       set a = a + (select b from b where a.id=b.id)
      where a.id in (select id from b);
      

  3.   

    大数据更新肯定要用游标的。写个过程吧。
    不过这个过程要注意更新异常的处理。我也在学习中。
    如果只是单独的做表更新,而且空间够大,可以做张新表的。
    CREATE ... AS 一下