update A x
set x.a1=(select w.b1*2 from B w where x.userid = w.userid ),
    x.a2=(select w.b2*5 from B w where x.userid = w.userid ),
    x.a3=(select w.b3*8 from B w where x.userid = w.userid )
好像这样就可以了,我自己没试过,我以前好像这样写的

解决方案 »

  1.   

    同意 bluewin99(蓝风) 意见
    不过,最好最好能修改一下
    update A
    set a1=(select w.b1*2 from B w where userid = A.userid ),
        a2=(select w.b2*5 from B w where userid = A.userid ),
        a3=(select w.b3*8 from B w where userid = A.userid )
    where userid in (select userid from B)
    语句能够正确执行条件:A.userid = B.userid在B表中只存在一条数据。 
      

  2.   

    应该还有更简单的方法:
    update A
    set (a1,a2,a3) =
    (select b1*2,b2*5,b3*8 from B where B.userid = A.userid)
      

  3.   

    同意,set后可以用这种方法。
      

  4.   

    update A
    set (a1,a2,a3) =
    (select b1*2,b2*5,b3*8 from B ) where B.userid = A.userid;
      

  5.   

    update A
    set (a1,a2,a3) =
    (select b1*2,b2*5,b3*8 from B where B.userid = A.userid);
      

  6.   

    LGQDUCKY(飘) 的这种方法我测试通不过啊
    where条件不认识B这个别名啊!
      

  7.   

    用一个表更新另一个表,在oracle中要求很严格:
    两表要有关键字相连,而且必须要能建立唯一的一对一关系才行:
    我觉得以上的都不行,会出现什么无法保持对应列的错误!若userid是a、b表键字,那么下面这UPDATE肯定行:
    update
    (
    select a1,a2,a3,b1,b2,b3 from a,b where a.userid = b.userid
    )
    set a1 = b1,a2 = b2, a3 = b3;
    若userid不是a、b表的关键字,那就建中间表吧,想法转成上面这种情况!