如何将多个更新 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
我的情况:我需要更新相同的列名:
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