如何更新 SQL 中具有相同值或不同值的多个列?

How to update multiple columns having the same value or different values in SQL?

我想更新 table 中具有相同值的多个列。例如,如果我们考虑这个 table.

col1     col2
--------------
2        -99
-99        5
3          6
4        -99

我想将 table 中的 -99 值更新为 NULL,预期结果如下所示。

col1     col2
--------------
2        NULL
NULL        5
3           6
4        NULL

我正在使用这种方式。

update table_name set col1 = null where col1 = -99;
update table_name set col2 = null where col2 = -99;

或者,如果我想在特定条件下更新列怎么办。 例如 -99 在 column1 中为 null,5 在 column2 中为 null。

有没有办法在一条语句中实现这一点?提前致谢。

你可以,通过使用 case 表达式,但是有什么好处?

update table_name set
  col1 = case when col1 = -99 then null /* or any new value for col1 */ else col1 end
  , col2 = case when col2 = -99 then null /* or any new value for col2 */ else col2 end
where col1 = -99 or col2 = -99;

请注意,正如 Larnu 所指出的,当您将列设置为 null 时,您可以将更新简化为:

update table_name set
  col1 = nullif(col1,-99)
  , col2 = nullif(col2,-99)
where col1 = -99 or col2 = -99;

并且您可以将每列使用的值 (-99) 更改为您想要的任何值,例如col2 = 5

update table_name set
  col1 = nullif(col1,-99)
  , col2 = nullif(col2,5)
where col1 = -99 or col2 = 5;

您可以使用 NULLIF。

UPDATE null_table
SET co1 = NULLIF(col1,-99)
,col2 = NULLIF(col2,-99)