请问在ORACLE中该如何写SQL才能达到相同的效果?

解决方案 »

  1.   

    bzszp(www.bzszp.533.net) ,刚才很感谢你,我又仔细想过了,在SQLSERVER中,如果数据不对应的话,那么以后的WHERE T1.C1 = T2.C2 .....就会把不对应的数据完全去掉,而把对应的数据自动汇总,我做了好几个测试了,都没有问题。
      

  2.   

    如果用update t1 set (c1,c2...) = (select ,c1,c2......
    的话如果select语句返回的结果集大于1就会报错,那实际上就只能一条一条的更新,就没有起到批量update的作用了!
      

  3.   

    oracle只能这样做嵌套查询更新
    不会达到你想想的要求。
      

  4.   

    update t1 set t1.col1=t1.col1+(select nvl(sum(t2.col1),0) from t2 where t2.pri=t1.pri);
      

  5.   

    to  lijin75(李进) :
    你的这个方法我试过了,但有如下问题。
    如果我的T1有两条记录,T2也有两天记录,然后T2的每一条记录对应T1的每一条记录,也就是说T2的每一条记录可以对应修改T1的一条记录,但如果用这种方法,因为T2的两条记录在T1中都有对应
    所以不能区分出每一条的对应情况来,结果就是将T1的UPDATE字段,修改为T2中两条记录对应字段的总和,而这样是错误的。
      

  6.   

    或者可以考虑用rowid来区分两条记录。
    rowid是唯一的。
    最好在表中加入唯一性字段id之类的来标识
      

  7.   

    update account_money a set a.ssye = 
    (select a.ssye + b.authorize_pay
      from fund_apply_original_return b
     where a.year = b.year and 
     a.unit_code = b.budget_unit and 
     a.subject_code = b.subject_code and
     a.item_code = nvl(b.item_code,'0'))