Search code examples
mysqlsqldb2

db2 equivalent of MySql REPLACE INTO


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.


Solution

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