2016-02-15 31 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