我希望每天更新我的表格并将天数培训减少一倍。如果减量后得到0,则应将其设置为NULL。如果是这样,Sel。训练也必须设置为NULL。 我想出了以下声明:
UPDATE charakter
SET `Days Training` = CASE WHEN `Days Training` is > 0
THEN CASE WHEN `Days Training`-1 > 0 THEN `Days Training`-1 END,
ELSE null
END,
`Sel. Training` = CASE WHEN `Days Training` IS null THEN null END
但是它返回#1064,这意味着语法有错误。我找不到它,我在做什么错了?
编辑: 我发现了自己的错误,我必须包含WHERE语句。我的最终工作声明如下。
UPDATE charakter
SET `Days Training` =
CASE
WHEN `Days Training`-1 = '0' then null
ELSE `Days Training`-1
END,
`Sel. Training` =
CASE
WHEN `Days Training` = '0' then null
ELSE `Sel. Training`
END
WHERE 1
答案 0 :(得分:0)
我认为您想要的逻辑很简单:
UPDATE charackter
SET `Days Training` = CASE WHEN `Days Training` > 1 THEN `Days Training` - 1 END;
如果不提供明确的ELSE
条件,则在培训天数为零或更少的情况下,MySQL只会分配NULL
。在这种情况下,递减将导致负数,您已声明要用NULL
代替。