1

有人知道 DB2 for i (V6r1) 是否支持类似

INSERT ON DUPLICATE KEY UPDATE.

我需要使用连接进行更新,但不想使用子查询。

4

2 回答 2

6

你可以通过使用'MERGE'来解决这个问题。像这样:

1.第一步:表'TEST'有一个表结构(A,B,C),主键'A',存在数据记录(1,2,3)。

2.第二步:现在你可以使用这个SQL命令插入一条记录(1,9,9),如下所示:

MERGE INTO TEST AS T
USING (VALUES( 1, 9,  9))  AS DAT(A, B,  C)
ON T.A = DAT.A 
WHEN MATCHED THEN UPDATE  SET T.C = DAT.C
WHEN NOT MATCHED THEN  INSERT (A, B,  C)  VALUES (DAT.A, DAT.B, DAT.C)
于 2015-05-18T04:09:12.530 回答
2

在 IBM i v7.1 中,您将拥有新的MERGE 语句

在 v6.1 中,您可以UPDATE在哪里找到匹配的行,然后INSERT在没有匹配的地方再声明一条。

例如,更新可能如下所示:

    UPDATE targetfile as u                                  
      SET  (  flda,fldb,fldc ) =
        (SELECT  a,   b,   c
                FROM inpdata as i           
                WHERE u.keyfld = i.keyfld
             )
      WHERE u.keyfld IN 
             (SELECT i.keyfld
                FROM inpdata as i           
             );

然后

    INSERT INTO targetfile 
            (keyfld, flda, fldb, fldc)
      SELECT keyfld, a,    b,    c
        FROM inpdata as i
        WHERE i.keyfld  NOT IN 
             (SELECT t.keyfld
                FROM targetfile as t           
             );

或者

    INSERT INTO targetfile 
            (keyfld, flda, fldb, fldc)
      SELECT keyfld, a,    b,    c
        FROM                inpdata    as i
        LEFT EXCEPTION JOIN targetfile as t           
          ON i.keyfld = t.keyfld;
于 2013-12-05T22:20:50.953 回答