Oracle数据库817:
用B表的数据更新A表:
Update A set A.Amt=A.Amt+(select sum(Amt) from B where A.ID=B.ID)
出现这样的问题:
在B表中不存在的A表的ID(not B.ID in (select A.ID from A)),A表相应的记录会被更新为Null,这显然不是所期望的结果。
请教各位前辈。

解决方案 »

  1.   

    A.Amt+(select sum(Amt) from B where A.ID=B.ID)?!//在ORACLE里试过没有
      

  2.   

    Update A set A.Amt=A.Amt+(select sum(Amt) from B where A.ID=B.ID(+))
    试试
      

  3.   

    Update A set A.Amt=A.Amt+(select NVL(sum(Amt),0) from B where A.ID=B.ID)
      

  4.   

    to bluemeteor:
    一样的结果。
    to  genphone_ru:
    你这样岂不是把原来的Null更新为0了,还不是一样的错误(更严重的错误)!
      

  5.   

    答案一:
    Update A set A.Amt=A.Amt+(select sum(Amt) from B where A.ID=B.ID)
    where A.ID in (select ID from B)
    答案二:
    Update A set A.Amt=A.Amt+(select sum(Amt) from B where A.ID=B.ID)
    where exists (select ID from A where A.ID=b.ID)
    经测试,答案二效率好于答案一。
      

  6.   

    to 楼主
    sum()出来永远不会等于0,所以genphone_ru(改行去学VC),他提供的NVL(sum(Amt),0)不会把null值变成0(我都不知nvl是什么意思)