我的查询如下所示:
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个查询中的上述更新(基本上避免覆盖相同的值)
答案 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
);