使用不同的where子句更新多个列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用不同的where子句更新多个列相关的知识,希望对你有一定的参考价值。

所以我有以下两个更新语句:

UPDATE table1 SET column1_new = "1" WHERE column1_old IS NOT NULL
UPDATE table1 SET column2_new = "2" WHERE column2_old IS NOT NULL

有没有办法在一个数据库调用中执行此操作?

答案

你可以做:

UPDATE table1
    SET column1_new = (CASE WHEN column1_old IS NOT NULL THEN 1 ELSE column1_new),
        column2_new = (CASE WHEN column2_old IS NOT NULL THEN 2 ELSE column2_new)
    WHERE column1_old IS NOT NULL OR column2_old IS NOT NULL;

但是,我认为使用update查询更简单。

另一答案

在这种特殊情况下,您可能会发现nvl2函数很有用,但您无法避免在where条件中使用or

update table1 set column1_new = nvl2(column1_old, 1, column1_new),
                  column2_new = nvl2(column2_old, 2, column2_new)
where column1_old is not null or column2_old is not null;

以上是关于使用不同的where子句更新多个列的主要内容,如果未能解决你的问题,请参考以下文章

在MySQL数据库中使用多个WHERE子句值更新多个列值时出现错误。

使用 where exists 子句更新多个值

带有 WHERE 的 DISTINCT 子句

错误代码:1054 'where 子句'中的未知列'billId'

使用一个 WHERE 子句更新多个表

我们可以在 WHERE 子句中对同一列使用多个 AND 条件吗? [复制]