如何更新 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)
我想更新 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)