尝试使用CASE更新时出现MySQL错误1064

时间:2020-02-02 15:13:33

标签: mysql

我希望每天更新我的表格并将天数培训减少一倍。如果减量后得到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

1 个答案:

答案 0 :(得分:0)

我认为您想要的逻辑很简单:

UPDATE charackter
SET `Days Training` = CASE WHEN `Days Training` > 1 THEN `Days Training` - 1 END;

如果不提供明确的ELSE条件,则在培训天数为零或更少的情况下,MySQL只会分配NULL。在这种情况下,递减将导致负数,您已声明要用NULL代替。