我想使用 MySQL 查询减去列中的每一行。我在 MSSQL https://social.msdn.microsoft.com/Forums/sqlserver/en-US/180b705c-08d9-467a-b247-814a8bb85a4a/how-can-can-i-subtract-the-value-of-the-column-in-each-row-?forum=transactsql 上找到了解决方案,我在 MSSQL 上尝试过,效果很好。然而,我尝试在 MySQL 上使用它并更改了一个小位查询,但它不起作用。这是我的查询
set @UpdatedQTY = 850;
UPDATE testsa
SET m1010=CASE WHEN @UpdatedQTY < 0 THEN 0 ELSE @UpdatedQTY END,
@UpdatedQTY = m1010-ABS(@UpdatedQTY)
WHERE m1010-ABS(@UpdatedQTY) < 0
这是响应
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'UPDATE testsa SET m1010=CASE WHEN @UpdatedQTY < 0 THEN 0 ELSE @UpdatedQTY END' at line 2`
任何人都可以在 MySQL 上使用它吗?或者 MySQL 不支持该查询?
最佳答案
您发布的代码包含两个查询:set @UpdatedQTY = 850
和 UPDATE testa ...
。
要么将它们分开并一一运行它们,要么,如果您使用的工具或库允许运行多个查询,则必须使用 ;
来分隔它们。
为了使 UPDATE
语句更易于阅读,您可以使用 GREATEST()
函数而不是 CASE
operator :
UPDATE testsa
SET m1010 = GREATEST(0, @UpdatedQTY),
@UpdatedQTY = m1010 - ABS(@UpdatedQTY)
WHERE m1010 - ABS(@UpdatedQTY) < 0
为了使其更具可读性(并且可能更快),您可以预先计算 ABS(@UpdatedQTY)
并将其存储到另一个变量中:
# This is probably set dynamically
SET @UpdatedQTY = 850;
# Compute its absolute value
SET @AbsQTY = ABS(@UpdatedQTY);
# Update the table
UPDATE testsa
SET m1010 = GREATEST(0, @UpdatedQTY),
@UpdatedQTY = m1010 - @AbsQTY
WHERE m1010 < @AbsQTY
关于MYSQL 减去每一行中的列的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54704659/