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服务器版本相对应的手册以获取在'UPDATE testsa附近使用的正确语法 组 m1010 =第2行@UpdatedQTY <0则0 ELSE @UpdatedQTY END'时的情况
任何人都可以在MySQL上使用它,或者MySQL不支持该查询吗?
答案 0 :(得分:1)
您发布的代码包含两个查询:set @UpdatedQTY = 850
和UPDATE testsa ...
。
或者将它们分开并一一运行,或者,如果使用的工具或库允许运行多个查询,则必须使用;
来分隔它们。
要使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