我有一个sql语句,update A 
SET (A.A1,A.A2) = (SELECT B.B1,B.B2 FROM B WHERE A.A3 = B.B3) 
WHERE A.A3 IN (1,2,3,4);我需要给这个语句加一个默认预设值,像nvl函数一样的,怎么办啊? 
用SELECT nvl(B.B1,0),nvl(B.B2,0) FROM B WHERE A.A3 = B.B3 只能渠道B1,B2为空是的预设默认值0,但是如果这条SQL语句中的子查询(SELECT B.B1,B.B2 FROM B WHERE A.A3 = B.B3)不能返回任何记录,那么A1,A2这两个字段就会被更新为NULL,可有什么办法让A1,A2的预设默认值为0,0呢?用什么函数啊?

解决方案 »

  1.   

    应该这么更新把:
    UPDATE A
       SET (A.A1, A.A2) = (SELECT B.B1, B.B2 FROM B WHERE A.A3 = B.B3)
     WHERE A.A3 IN (1, 2, 3, 4)
       AND EXISTS (SELECT B.B1, B.B2 FROM B WHERE A.A3 = B.B3);
      

  2.   

    select nvl(字段,0) from dual;
      

  3.   

    直接修改表结构
    alter table a modify a1 default 0;
    alter table a modify a2 default 0