有人知道 DB2 for i (V6r1) 是否支持类似
INSERT ON DUPLICATE KEY UPDATE.
我需要使用连接进行更新,但不想使用子查询。
有人知道 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 语句
在 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;