Db2 iseries INSERT ON DUPLICATE KEY

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Db2 iseries INSERT ON DUPLICATE KEY相关的知识,希望对你有一定的参考价值。

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

INSERT ON DUPLICATE KEY UPDATE.

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

答案

您可以使用'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)
另一答案

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

以上是关于Db2 iseries INSERT ON DUPLICATE KEY的主要内容,如果未能解决你的问题,请参考以下文章

通过 Data Studio 为 DB2 for IBM i (iSeries) 构建存储过程失败

IBM iSeries / AS 400中的DB2连接字符串

在iSeries DB2中使用SQL将整数转换为日期

使用 Iseries 上的 SQL DB2 从 WEB 获取 XML

DB2/iSeries SQL 清理 CR/LF、制表符等

Cognos 10.2.2 as400 iSeries DB2 jdbc 连接