2016-09-21 75 views
0

需要help.Below是我在DB2中运行的查询。如果从中获取要更新的值的内部查询没有返回值,则列将被设置为null,覆盖以前的值。如果选择查询返回空值,那么可以避免这种情况并保留以前的值将列更新为空,覆盖现有值

UPDATE 
    EMPLOYEE demo 
SET 
    demo.PREFERREDTELEPHONE = (SELECT 
     CONCAT(TRIM(ph.PHONENUMBER), 
     TRIM(ph.PHONEAREACODE)) 
    FROM 
     EVIDENCE ed 
    JOIN 
     CONCERNROLEPHONENUMBER cnum 
     ON cnum.CONCERNROLEID = ed.PARTICIPANTID 
    JOIN 
     PHONENUMBER ph 
     ON ph.PHONENUMBERID = cnum.PHONENUMBERID 
    WHERE 
     ed.CASEID = demo.INTEGRATEDCASEID 
     AND ed.PARTICIPANTID= demo.PARTICIPANTID 
     AND ed.EVIDENCETYPE = 'PDC0000256'  
     AND ed.STATUSCODE = 'EDS1' 
     AND ed.LASTWRITTEN = (
     SELECT 
      MAX(ed1.LASTWRITTEN) 
     FROM 
      EVIDENCE ed1 
     WHERE 
      ed1.CASEID=ed.CASEID 
      AND ed1.PARTICIPANTID=ed.PARTICIPANTID 
      AND ed1.EVIDENCETYPE = 'PDC0000256'  
      AND ed1.STATUSCODE = 'EDS1' 
    ) FETCH FIRST 1 ROW ONLY 
) 
+0

COALESCE可以用来设置一定的值(旧的内容)时,别的东西(查询)返回null – MichaelTiefenbacher

回答

1

两个选项

使用COALESCE()与当前值替换NULL

update mytable 
set fld = coalesce(select<....>, fld) 
where... 

只更新有符合该行

update mytable A 
set fld = (select myvalue from myfile B where a.key = b.key) 
where exists (select * from myfile B where a.key = b.key) 
0

我同意查尔斯,你可以使用IFNULL太

update mytable 
set fld = ifnull(select<....>, fld) 
where...