如何将多个更新 SQL 命令简化为单个 SQL 命令?

How can I simplify multiple update SQL commands as a single SQL command?

我的情况:我需要更新相同的列名:

UPDATE shipping_matrixrate 
SET condition_from_value = 0 
WHERE condition_from_value = 0;

UPDATE shipping_matrixrate 
SET condition_from_value = 0.501 
WHERE condition_from_value = 501;

UPDATE shipping_matrixrate 
SET condition_from_value = 1.001 
WHERE condition_from_value = 1001;

UPDATE shipping_matrixrate   
SET condition_from_value = 1.501 
WHERE condition_from_value = 1501;

UPDATE shipping_matrixrate 
SET condition_from_value = 2.001 
WHERE condition_from_value = 2001;

UPDATE shipping_matrixrate 
SET condition_from_value = 2.501 
WHERE condition_from_value= 2501;

UPDATE shipping_matrixrate 
SET condition_from_value = 3.001 
WHERE condition_from_value= 3001;

UPDATE shipping_matrixrate 
SET condition_from_value = 3.501 
WHERE condition_from_value = 3501;

UPDATE shipping_matrixrate 
SET condition_from_value = 4.001 
WHERE condition_from_value = 4001;

UPDATE shipping_matrixrate 
SET condition_from_value = 4.501 
WHERE condition_from_value = 4501;

我如何运行将其作为单个 SQL 命令?

使用 "IN" 运算符并除以 1000:

UPDATE shipping_matrixrate 
SET condition_from_value = condition_from_value / 1000.00 
WHERE condition_from_value IN (0, 501, 1001, 1501, 2001, 2501, 3001, 3501, 4001, 4501);

将值除以 1000

UPDATE shipping_matrixrate 
SET condition_from_value= condition_from_value/1000 
WHERE ( condition_from_value <= 4501 and 
 condition_from_value%500 = 1) 
or condition_from_value =0

如果您想更新值为 0、1、501、1001 等的所有行,则类似这样

如果需要,向 WHERE 子句添加 upper/lower 限制。

UPDATE shipping_matrixrate
SET condition_from_value= condition_from_value / 1000.0
WHERE condition_from_value % 500 = 1 or condition_from_value = 0

% 是一个常见的模运算符。但是,ANSI SQL 指定 MOD() 函数用于取模。 IE。做 MOD(condition_from_value, 500) = 1.

你可以尝试使用case命令

Update shipping_matrixrate
Set condition_from_value  =  
Case When condition_from_value = 0 Then 0
     When condition_from_value = 501 Then 0.501
     When ...
End