[英]DB2, MERGE INTO update if value different
I have this kind of DB2 request which work 我有这种工作的DB2请求
MERGE INTO table_to_upsert AS tab
USING (VALUES
(1, 2, 3),
(4, 5, 6),
(7, 8, 9)
-- more rows
) AS merge (C1, C2, C3)
ON tab.key_to_match = merge.key_to_match -- usually the primary key example : tab.C2 = merge.C2
WHEN MATCHED THEN
UPDATE SET tab.C1 = merge.C1,
tab.C2 = merge.C2,
tab.C3 = merge.C3
WHEN NOT MATCHED THEN
INSERT (C1, C2, C3)
VALUES (merge.C1, merge.C2, merge.C3)
But now, what I want is, IF primary key already existe, then update, BUT only update C1 if the new value of C1 is different from the old one. 但是现在,我想要的是,如果主键已经存在,然后进行更新,但只有C1的新值与旧值不同时才更新C1。
In theory something like that 理论上是这样的
MERGE INTO table_to_upsert AS tab
USING (VALUES
(1, 2, 3),
(4, 5, 6),
(7, 8, 9)
-- more rows
) AS merge (C1, C2, C3)
ON tab.key_to_match = merge.key_to_match
WHEN MATCHED THEN
UPDATE SET tab.C1 = merge.C1,
tab.C2 = merge.C2,
tab.C3 = merge.C3
WHERE tab.C1 != merge.C1
WHEN NOT MATCHED THEN
INSERT (C1, C2, C3)
VALUES (merge.C1, merge.C2, merge.C3)
I add the WHERE tab.C1 != merge.C1
but it's not working, result in 我添加了
WHERE tab.C1 != merge.C1
但它不起作用,导致
Error: ILLEGAL SYMBOL WHERE;
错误:非法符号在哪里; VALID SYMBOLS
有效符号
If I remember correctly, you can add one search condition to the matched line, ie 如果我没记错的话,可以在匹配的行中添加一个搜索条件,即
MERGE INTO table_to_upsert AS tab
USING (VALUES
(1, 2, 3),
(4, 5, 6),
(7, 8, 9)
-- more rows
) AS merge (C1, C2, C3)
ON tab.key_to_match = merge.key_to_match
WHEN MATCHED AND tab.C1 != merge.C1 THEN
UPDATE SET tab.C1 = merge.C1,
tab.C2 = merge.C2,
tab.C3 = merge.C3
WHEN NOT MATCHED THEN
INSERT (C1, C2, C3)
VALUES (merge.C1, merge.C2, merge.C3)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.