2016-09-21 74 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...