update irpt_departments a set a.parent=(select id from irpt_departments b where a.dept_adrresscode=b.dept_adrresscode and b.isjc='9')
where substr(a.id,1,2)='00';
这句执行后提示:
ERROR 位于第 1 行: 
ORA-01407: 无法更新 ("WSZBIRPT"."IRPT_DEPARTMENTS"."PARENT") 为 NULL 
怎么才能匹配到的更新,不匹配的不更新呢?谢谢

解决方案 »

  1.   

    UPDATE IRPT_DEPARTMENTS A
       SET A.PARENT = (SELECT ID
                         FROM IRPT_DEPARTMENTS B
                        WHERE A.DEPT_ADRRESSCODE = B.DEPT_ADRRESSCODE
                          AND B.ISJC = '9')
     WHERE SUBSTR(A.ID, 1, 2) = '00'
       AND EXISTS (SELECT 1
              FROM IRPT_DEPARTMENTS B
             WHERE A.DEPT_ADRRESSCODE = B.DEPT_ADRRESSCODE
               AND B.ISJC = '9'
               AND ID IS NOT NULL);
      

  2.   

    try following again ..
    update irpt_departments a
       set a.parent = (select id
                         from irpt_departments b
                        where a.dept_adrresscode = b.dept_adrresscode
                          and b.isjc = '9')
     where substr(a.id, 1, 2) = '00'
       and a.dept_adrresscode in
           (select dept_adrresscode from irpt_departments);
      

  3.   

    update (select parent from irpt_departments where substr(irpt_departments.id,1,2)='00') a set a.parent=(select id from irpt_departments b where a.dept_adrresscode=b.dept_adrresscode and b.isjc='9') 
    where exist(select 1 from irpt_departments b where a.dept_adrresscode=b.dept_adrresscode and b.isjc='9'); 
      

  4.   

    UPDATE IRPT_DEPARTMENTS A
       SET A.PARENT = NVL((SELECT ID
                            FROM IRPT_DEPARTMENTS B
                           WHERE A.DEPT_ADRRESSCODE = B.DEPT_ADRRESSCODE
                             AND B.ISJC = '9'),
                          A.PARENT)
     WHERE SUBSTR(A.ID, 1, 2) = '00';
      

  5.   

    不知道这个有没有语法错误,没环境,楼主可以调调试试。
    UPDATE IRPT_DEPARTMENTS A 
      SET A.PARENT = 
       case 
       when NVL((SELECT ID 
                            FROM IRPT_DEPARTMENTS B 
                          WHERE A.DEPT_ADRRESSCODE = B.DEPT_ADRRESSCODE 
                            AND B.ISJC = '9'), 
                          A.PARENT) = null
       then 0
       when NVL((SELECT ID 
                            FROM IRPT_DEPARTMENTS B 
                          WHERE A.DEPT_ADRRESSCODE = B.DEPT_ADRRESSCODE 
                            AND B.ISJC = '9'), 
                          A.PARENT) != null
       then  NVL((SELECT ID 
                            FROM IRPT_DEPARTMENTS B 
                          WHERE A.DEPT_ADRRESSCODE = B.DEPT_ADRRESSCODE 
                            AND B.ISJC = '9'), 
                          A.PARENT)
        end
    WHERE SUBSTR(A.ID, 1, 2) = '00';