db2 equivalent of MySql REPLACE INTO

牧云@^-^@ 提交于 2019-12-23 20:09:05

问题


I very useful statement I like of MySql is REPLACE INTO table that is 'REPLACE a value if-exist OR INSERT INTO table If-Not-Exist'.

The documentation of db2 REPLACE is for a function operating on strings only so not with that meaning.

Is there any equivalent in db2? Right now I am looking also for keywords IF EXSTS/IF NOT EXIST.


回答1:


DB2 uses the SQL standard MERGE statement to do basically the same thing. The syntax is different:

MERGE INTO table_to_upsert AS tab
USING (VALUES
        (1, 2, 3),
        (4, 5, 6),
        (7, 8, 9)
        -- more rows
    ) AS merge (C1, C2, C3)
    ON tab.key_to_match = merge.key_to_match
    WHEN MATCHED THEN
        UPDATE SET tab.C1 = merge.C1,
                   tab.C2 = merge.C2,
                   tab.C3 = merge.C3
    WHEN NOT MATCHED THEN
        INSERT (C1, C2, C3)
        VALUES (merge.C1, merge.C2, merge.C3)



回答2:


The DB2 function that you are looking for is MERGE

CREATE TABLE FOO ( ID INT, TITLE VARCHAR(500), VALUE );
CREATE TABLE BAR ( ID INT, TITLE VARCHAR(500), VALUE );
INSERT INTO FOO VALUES (1, 'BAR', 5.0);
INSERT INTO BAR VALUES (1, 'CCC', 3.0);
INSERT INTO BAR VALUES (2, 'DDD', 1.0);

MERGE INTO FOO AS F
   USING BAR AS B
   ON (F.ID = B.ID) WHEN MATCHED THEN UPDATE SET TITLE = B.TITLE, VALUE = F.VALUE - B.VALUE
   WHEN NOT MATCHED THEN INSERT VALUES(B.ID, B.TITLE, B.VALUE);

SELECT ID, TITLE, VALUE FROM FOO;
1    CCC    2.0
2    DDD    1.0

This explanation from DeveloperWorks will fill in some of the gaps.



来源:https://stackoverflow.com/questions/15701327/db2-equivalent-of-mysql-replace-into

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!