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 上使用它并更改一个 lil 位查询,但它不起作用。这是我的查询
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 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 2 行的“UPDATE testa SET m1010=CASE WHEN @UpdatedQTY < 0 THEN 0 ELSE @UpdatedQTY END”附近使用正确的语法
任何人都可以在 MySQL 上使用它吗?或者 MySQL 不支持该查询?
解决方案
您发布的代码包含两个查询:set @UpdatedQTY = 850
和UPDATE testsa ...
.
要么将它们分开并一一运行,要么,如果您使用的工具或库允许运行多个查询,则必须使用;
将它们分开。
为了使UPDATE
语句更易于阅读,您可以使用GREATEST()
函数而不是CASE
运算符:
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
推荐阅读
- asterisk - Asterisk AsterNET 如何从停车转移到排队?
- swift - 使用 ObservableObject 使用 SwiftUI 导航到不同的视图
- sql - 将单引号替换为常规缩写
- python - Python:python 中的约束优化 - 最快/有效的方式?
- postgresql - Postgresql tsvector不搜索几个字符串
- powershell - 将 CSV 格式更改为 powershell 可接受的 CSV
- python - VS Code 中按语言划分的不同默认终端
- asp.net-core - Moq 的单元测试收到错误“”表达式树可能不包含使用可选参数的调用或调用“”
- javascript - Vue方法来计算数组中的重复项
- sql - 返回一列一致但另一列在一段时间内发生变化的行