使用Case更新多个列

时间:2016-03-18 02:16:10

标签: sql oracle query-performance

我的查询如下所示:

UPDATE some_table
SET column_x = CASE WHEN x_specific_condition THEN new_value_for_x ELSE column_x END,
    column_y = CASE WHEN y_specific_condition THEN new_value_for_y ELSE column_y END, 
WHERE some_more_conditions

上面的问题是,如果some_more_conditions返回true,则每个列(x,y)仍会使用它们自己的值进行更新,而不管它们的特定条件是否返回true。我尝试从上面删除ELSE,但没有运气

我合并,因为some_more_conditions对于这两种情况都相同,我认为最好在1次更新中执行所有操作(建议欢迎)

您是否知道我是否可以通过跳过特定条件不匹配的各个列来完成1个查询中的上述更新(基本上避免覆盖相同的值)

1 个答案:

答案 0 :(得分:2)

要在一次更新中执行此操作,您需要展开{​​{1}}子句:

where

另一种方法是使用多个更新,但这可能更昂贵:

UPDATE some_table
    SET column_x = CASE WHEN x_specific_condition THEN new_value_for_x ELSE column_x END,
        column_y = CASE WHEN y_specific_condition THEN new_value_for_y ELSE column_y END, 
    WHERE some_more_conditions AND
          (x_specific_condition OR
           y_specific_condition
          );