SQL ORACLE MERGE表

时间:2016-02-05 11:29:15

标签: oracle merge

我想使用MA_PARTICIPANT更新我的表MERGE UPDATE CLAUSE。我想更新两列:

MA_PARTICIPANT.CUSTOMER_RK,MA_PARTICIPANT.DEACT_FLG. CUSTOMER_RK将使用我的第二个表TABLE_CHANGE进行更新,其中包含两列: -

CUSTOMER_RK,NEW_CUSTOMER_RK. MA_PARTICIPANT.DEACT_FLG中的

MA_PARTICIPANT可能是'Y'或'N',如果是'N',那么我应该将其更改为'Y',但如果它已经'Y'那么我应该不更新此列。合并表格将在MA_PARTICIPANT.part_id = TABLE_CHANGE.part_id上,但我不知道如何在MA_PARTICIPANT.DEACT_FLG上使用条件合并。

最后,我更新的每个CUSTOMER_RK都应该有flg ='Y'

MA_PARTICIPANT的简单示例:

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

TABLE_TO_CHANGE的简单示例:

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          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

1 个答案:

答案 0 :(得分:0)

这应该更新所有匹配的行,将DEACT_FLG设置为Y,将CUSTOMER_RK设置为NEW_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'