提问者:小点点

DB2相当于MySql REPLACE INTO


我喜欢MySql的一个非常有用的语句是REPLACE INTO table,即“存在时替换值,不存在时插入表”。

db2REPLACE的留档仅用于对字符串进行操作的函数,因此不具有该含义。

db2中是否有任何等价物?现在我还在寻找关键字IF-EXSTS/IF-NOT-EXIST


共2个答案

匿名用户

DB2使用SQL标准的MERGE语句来做基本相同的事情。语法不同:

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)

匿名用户

您正在寻找的DB2函数是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

DeveloperWorks的这一解释将填补一些空白。