2016-02-05 112 views
0

我想用MERGE UPDATE CLAUSE更新我的表MA_PARTICIPANT。我想更新兩列:SQL ORACLE MERGE表

MA_PARTICIPANT.CUSTOMER_RK,MA_PARTICIPANT.DEACT_FLG. CUSTOMER_RK將與我的第二個表TABLE_CHANGE它由兩列進行更新: -

CUSTOMER_RK,NEW_CUSTOMER_RK. MA_PARTICIPANT.DEACT_FLGMA_PARTICIPANT可能是「Y」或「N」,如果「N」則我應該將它更改爲'Y',但如果它已經'是',那麼我不應該更新此列。合併表將在MA_PARTICIPANT.part_id = TABLE_CHANGE.part_id,但我不知道如何使用條件合併MA_PARTICIPANT.DEACT_FLG

最後,每個CUSTOMER_RK我更新應具有FLG = 'Y'

簡單MA_PARTICIPANT的例子:更新後

PART_ID CUSTOMER_RK NEW_CUSTOMER_RK 
1   10   100 
2   10   100 
3   20   200 

MA_PARTICIPANT:

PART_ID CUSTOMER_RK DEACT_FLG 
1   10   Y 
2   10   N 
3   20   Y 

簡單TABLE_TO_CHANGE的例子:

PART_ID CUSTOMER_RK DEACT_FLG 
1   100   Y 
2   100   Y 
3   200   Y 

我想,這將是:

merge INTO MA_PARTICIPANT P USING 
    (SELECT * from TABLE_TO_CHANGE) TT ON (TT.PART_ID = P.PART_ID) 
WHEN matched THEN 
    UPDATE  
    SET 
    IF P.DEACTIVATED_FLG <> 'Y' THEN 
    P.CUSTOMER_RK = TT.NEW_CUSTOMER_RK, 
    P.DEACTIVATED_FLG = 'Y' 
    ELSE 
    P.CUSTOMER_RK = TT.NEW_CUSTOMER_RK 
+0

聽起來像是你在更新部分需要一個where子句的合併聲明。如果我是你,我會先寫MERGE聲明並將其添加到問題中。 – Boneist

回答

0

這應該更新所有匹配的行,設置DEACT_FLG到Y和CUSTOMER_RKNEW_CUSTOMER_RK

MERGE INTO MA_PARTICIPANT P 
USING TABLE_TO_CHANGE TT 
ON (TT.PART_ID = P.PART_ID) 
WHEN matched THEN 
    UPDATE  
    SET CUSTOMER_RK = NEW_CUSTOMER_RK, 
     DEACT_FLG = 'Y' 
+0

我應該更新EACH值CUSTOMER_RK,我已經在表TABLE_TO_CHANGE和值DEACTIVATED_FLG取決於表中的值MA_PARTICIPANT - 如果值'N'那麼我udpate它爲'Y'其他 - 不更新。最後,我更新的每個CUSTOMER_RK應該有flg ='Y' – Jdzel

+0

如果是這樣,我們不需要'IF','DECODE',...;在MERGE中,對於每一個匹配的行,我們可以更新'CUSTOMER_RK = NEW_CUSTOMER_RK'和'DEACT_FLG ='Y'' – Aleksej