2016-02-15 34 views
0

這是我的代碼到目前爲止。我不知道在When not matched中應該放什麼,因爲從理論上講,他們應該始終保持一致。所以我想我可以把''(爲null)放在那裏?更新2個表Oracle

此外,我需要在我的子查詢WHERE to_date(fgmulti.in_date)= to_date(sysdate)條件。

MERGE INTO fgmulti FGM 
USING 
    (SELECT * FROM arinvt 
    WHERE class LIKE 'CP%' OR 'FG%' OR 'IN%' OR 'LA%' OR 'PK%') AS Classes 
ON fgm.arinvt_id = classes.id 
WHEN MATCHED THEN 
    SET non_conform_id = '21' 
    WHEN NOT MATCHED BY TARGET THEN 
      INSERT (non_conform_id) VALUES ('17') 

我不知道有關與SQL撥弄你的問題,因爲我不認爲我需要創建另一個表,因爲我試圖更新當前一個。如果我聽起來很可笑,請讓我知道 - 哈!

+0

寫兩條'MERGE'語句。您需要發佈** create和insert語句**,因爲我們沒有您的表和數據。顯示你想要的輸出。至少,創建一個** SQL小提琴**。 –

+0

我更新了我的問題(希望)可以幫助我們朝着正確的方向前進 –

回答

0

您的語法對於Oracle來說是錯誤的。這應該工作。

MERGE INTO fgmulti FGM 
USING 
    (SELECT * FROM arinvt 
    WHERE class LIKE 'CP%' 
    OR class LIKE 'FG%' 
    OR class LIKE 'IN%' 
    OR class LIKE 'LA%' 
    OR class LIKE 'PK%') Classes 
ON (fgm.arinvt_id = classes.id 
    and fgm.in_date = sysdate) 
WHEN MATCHED THEN 
    UPDATE SET non_conform_id = '21' 

請注意,分支是可選的。如果行不匹配時你不想做任何事情,那就省略WHEN NOT MATCHED子句。

此外,當該值已經是DATE時,我們不需要TO_DATE(),這肯定是sysdate,我希望in_date也是。

+0

想出來 - 只需要在SET之前添加一條UPDATE語句到您發佈的部分。非常感謝! –

+0

@RyanShukis - 哎呀! :) – APC