如果值不同,则DB2,MERGE INTO更新

阿姆德夫

我有这种工作的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)

但是现在,我想要的是,如果主键已经存在,然后进行更新,但只有C1的新值与旧值不同时,才更新C1。

理论上是这样的

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)

我添加,WHERE tab.C1 != merge.C1但是它不起作用,导致

错误:非法符号在哪里;有效符号

相对PHP新手

如果我没记错的话,可以在匹配的行中添加一个搜索条件,即

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)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

DB2 SQL更新表值

来自分类Dev

DB2,优化更新查询

来自分类Dev

无法更新 DB2 表

来自分类Dev

加入 db2 中的更新

来自分类Dev

使用R编写和更新DB2表

来自分类Dev

DB2 TIMESTAMP的自动初始化和更新

来自分类Dev

如何使用联接更新DB2表?

来自分类Dev

DB2中的增量更新语句

来自分类Dev

如何仅更新db2中的匹配列

来自分类Dev

如何在DB2中的单个更新语句中更新多列

来自分类Dev

批量更新比db2中的单个更新快吗?

来自分类Dev

如何在DB2中的单个更新语句中更新多列

来自分类Dev

如果其他表上的列值不同,则更新行

来自分类Dev

如果更新的值是负数,则忽略更新

来自分类Dev

无法更新textarea值(如果已更新)?

来自分类Dev

SQL更新,如果值= 1

来自分类Dev

如果用户注销,则更新值

来自分类Dev

更新值

来自分类Dev

如何在单个db2查询中精确更新一条记录并选择更新的行

来自分类Dev

如何在单个db2查询中精确更新一条记录并选择更新的行

来自分类Dev

流星更新-如何更新值?

来自分类Dev

db2中更新表失败,其SQLCODE:-668,SQLSTATE:57016,SQLERRMC:7;

来自分类Dev

DB2 SQL语句,用于插入新数据和更新现有数据

来自分类Dev

通过用户输入的“ DB2存储过程更新XML”列

来自分类Dev

db2中更新表失败,SQLCODE:-668,SQLSTATE:57016,SQLERRMC:7;

来自分类Dev

db2在1个查询中更新两个表

来自分类Dev

IBM DB2 for i SQL(iSeries)-使用更新从字段末尾除去字符

来自分类Dev

DB2客户端更新后丢失ODBC设置

来自分类Dev

如何为DB2中的多行更新同一列