MYSQL 减去每一行中的列的值

标签 mysql

我想使用 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 = 850UPDATE 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/

相关文章:

jquery - 将函数的值赋给变量

mysql - SQL 无法获得与 group_concat 一起使用的限制

mysql - Django:将参数传递给原始 SQL 查询时出现 MySQL 语法错误

MySQL:加入未使用的表会增加执行时间吗?

mysql 精细具体命令类别

mysql - 同时更新 3 列 2nd 表所有字段 varchar 更新电话号码的帮助

php - 了解 url 缩短函数

php - 根据MySQL数据库记录的ID创建文件结构

MySql Performance : INSERT. ..ON DUPLICATE KEY UPDATE 或 UPDATE & ROW_COUNT

mysql - 如何更改MySQL错误日志文件的时区?