Db2 iseries INSERT ON DUPLICATE KEY

问题描述 投票:0回答:2

有谁知道DB2 for i(V6r1)是否支持类似的东西

INSERT ON DUPLICATE KEY UPDATE.

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

database db2 ibm-midrange db2-400
2个回答
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)

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;
© www.soinside.com 2019 - 2024. All rights reserved.