繁体   English   中英

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

[英]MySQL Error 1064 when trying to update with CASE

我希望每天更新我的表格并将训练天数减少 1。 如果递减后为0,则应将其设置为NULL。 如果是这样,塞尔。 训练也必须设置为 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

我认为你在这里想要的逻辑很简单:

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

通过不提供明确的ELSE条件,当训练天数为零或更少时,MySQL 只会为任何情况分配NULL 在这种情况下,进行递减将导致负数,您已经声明要用NULL替换它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM