0

在此处输入图像描述

数据库:甲骨文

我喜欢根据以下条件将列 ClientCode 值“30”更新为“40”:

如果 a.Newcode (12.1.1) = b.Old_code(12.1.1) 且 b.new_code 为空

我已经尝试了以下查询,但到目前为止没有成功;

UPDATE CLIENTACTIVITYCODEMAPPING a 

SET a.CLIENTCODE = (SELECT B.CLIENTCODE FROM CLIENTACTIVITYCODEMAPPING b 

                        WHERE b.NEW_CODE IS NULL
                            AND b.PROJECTCODE = A.PROJECTCODE
                                AND b.OLD_CODE = a.NEW_CODE)
WHERE a.PROJECTCODE = 2242

AND a.NEW_CODE IS NOT NULL

AND A.NEW_CODE IN (SELECT c.OLD_CODE FROM CLIENTACTIVITYCODEMAPPING c where c.new_code is null and c.old_code = a.new_code) 
4

1 回答 1

0

一种解决方案是将相关子查询也添加到where子句中:

UPDATE CLIENTACTIVITYCODEMAPPING a 
    SET a.CLIENTCODE = (SELECT B.CLIENTCODE
                        FROM CLIENTACTIVITYCODEMAPPING b 
                        WHERE b.NEW_CODE IS NULL AND b.PROJECTCODE = A.PROJECTCODE AND
                              b.OLD_CODE = a.NEW_CODE
                       )
    WHERE a.PROJECTCODE = 2242 AND a.NEW_CODE IS NOT NULL and
          A.NEW_CODE IN (SELECT c.OLD_CODE FROM CLIENTACTIVITYCODEMAPPING c where c.new_code is null and c.old_code = a.new_code) and
          exists (SELECT B.CLIENTCODE
                  FROM CLIENTACTIVITYCODEMAPPING b 
                  WHERE b.NEW_CODE IS NULL AND b.PROJECTCODE = A.PROJECTCODE AND
                        b.OLD_CODE = a.NEW_CODE
                 )

另一种是coalesce()在新的值是时使用保持相同的值NULL

UPDATE CLIENTACTIVITYCODEMAPPING a 
    SET a.CLIENTCODE = coalesce((SELECT B.CLIENTCODE
                                 FROM CLIENTACTIVITYCODEMAPPING b 
                                 WHERE b.NEW_CODE IS NULL AND b.PROJECTCODE = A.PROJECTCODE AND
                                       b.OLD_CODE = a.NEW_CODE
                                ), a.clientcode)
    WHERE a.PROJECTCODE = 2242 AND a.NEW_CODE IS NOT NULL and
          A.NEW_CODE IN (SELECT c.OLD_CODE FROM CLIENTACTIVITYCODEMAPPING c where c.new_code is null and c.old_code = a.new_code)
于 2013-08-02T17:44:11.060 回答