向各位请教个问题,
我想从表2取一个字段来和表1的一个字段相加然后更新表1的这个字段,两个表有外键关联,请问这条SQL怎么写啊
象MSSQL就可以支持update table1 set aa=a.aa+b.bb from table1 a,table2 b where a.id=b.id?
谢谢

解决方案 »

  1.   

    update table1 set aa=a.aa+(select MAX(b.bb) from table2 b where table1.id=b.id)
    这样行不?
      

  2.   

    oracle 不支持update... from 语法,只能用子查询,如果是两个字段的话,可以这样写:update table1 set (aa,aa1)  
      =(select b.bb,bb.bb1 from table2 b where table1.id=b.id and rownum <=1 )
      

  3.   

    手误:
    update table1 set (aa,aa1)  
      =(select b.bb,b.bb1 from table2 b where table1.id=b.id and rownum <=1 )
      

  4.   

    update table1
       set aa = (select a.aa + b.bb from table2 b where a.id = b.id)
     where exists(select 1 from table2 b where a.id = b.id)
      

  5.   

    不会吧,楼上的,难道我这种Update,再无解了?
    UPDATE LAB_ZSHQ A2
    SET A2.F_PRECLOSE = A2.F_PRECLOSE*(
        SELECT exp(sum(ln(A1.F_XS)))  FROM LAB_ZSHQ A1
        WHERE A1.ZS_ID=A2.ZS_ID AND A1.F_DATE <=A2.F_DATE),
        A2.F_OPEN = A2.F_OPEN*(
        SELECT exp(sum(ln(A1.F_XS)))  FROM LAB_ZSHQ A1
        WHERE A1.ZS_ID=A2.ZS_ID AND A1.F_DATE <=A2.F_DATE),
     A2.F_HIGH = A2.F_HIGH*(
        SELECT exp(sum(ln(A1.F_XS)))  FROM LAB_ZSHQ A1
        WHERE A1.ZS_ID=A2.ZS_ID AND A1.F_DATE <=A2.F_DATE),
     A2.F_LOW = A2.F_LOW*(
        SELECT exp(sum(ln(A1.F_XS)))  FROM LAB_ZSHQ A1
        WHERE A1.ZS_ID=A2.ZS_ID AND A1.F_DATE <=A2.F_DATE),
     A2.F_CLOSE = A2.F_CLOSE*(
        SELECT exp(sum(ln(A1.F_XS)))  FROM LAB_ZSHQ A1
        WHERE A1.ZS_ID=A2.ZS_ID AND A1.F_DATE <=A2.F_DATE)
    WHERE A2.ZS_ID=LF_ID
    ;
    --此语句难道不能只查一次???
    SELECT exp(sum(ln(A1.F_XS)))  FROM LAB_ZSHQ A1
        WHERE A1.ZS_ID=A2.ZS_ID AND A1.F_DATE <=A2.F_DATE)
      

  6.   

    是呀是呀,我也正这这东本愁,高手请指点一下呀
    TO:hevin(没有什么是不可能的) 你那样好像只能更新一条记录呀,按楼主的意思,关联出来可能会有多条记录,那就要更新多条记录了。下面这个又如何改呢:
    update tb1
      set code = b.code,
          num = b.num
      from tb1 inner join (
           select code, sum(num) as num from tb1 group by code
      ) as b on tb1.code = b.code 
      

  7.   

    update table1 a set a.aa=a.aa+(select MAX(b.bb) from table2 b where a.id=b.id) where exists (select id from table2 where a.id=id)
      

  8.   

    oracle 的update 写的时候一定注意更新的记录能够一一对应,嵌套的时候外层的别名可以在内层用,内层的不可以在外层用,一般注意这两点就不会错了