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