Db2 iseries INSERT ON DUPLICATE KEY

时间:2013-12-05 14:24:48

标签: database db2 ibm-midrange db2-400

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

的内容
INSERT ON DUPLICATE KEY UPDATE.

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

2 个答案:

答案 0 :(得分:3)

你可以使用' 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)

答案 1 :(得分:2)

在IBM i v7.1中,您将获得新的MERGE statement

在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;