【问题标题】:Trying to Encapsulate a CASE/Conditional Statement Within A Trigger in MySQL尝试在 MySQL 的触发器中封装 CASE/条件语句
【发布时间】:2022-11-12 12:03:12
【问题描述】:

我有一个触发器:

CREATE TRIGGER Moves 
AFTER INSERT ON Rolls
FOR EACH ROW
UPDATE Players
CASE
    WHEN P_Location + NEW.Rolls < 17 THEN
    SET P_Location = P_Location + NEW.Rolls
    WHERE id = NEW.Player_id
    ELSE 
    SET P_Location = NEW.Rolls - (16 - P_Location)
END;

但是语法在某处不正确并产生错误。我已经在这个网站上检查过类似的问题,但我看到的那些似乎使用了在这种情况下似乎不起作用的方法(特别是使用 IF)。我希望主要条件是

IF P_Location + NEW.Rolls < 17 THEN
SET P_Location = P_Location + NEW.Rolls
WHERE id = NEW.Player_id

ELSE 部分是

SET P_Location = NEW.Rolls - (16 - P_Location)

触发器内。谁能解释一下我该怎么做?

【问题讨论】:

    标签: mysql sql triggers mysql-workbench


    【解决方案1】:

    CASE 表达式必须计算为标量,但您通过 CASE 表达式连接其他子句。

    您可以这样做,因此 CASE 的结果返回一个标量,并将该标量分配给列 P_Location。

    UPDATE Players
    SET P_Location = CASE WHEN P_Location + NEW.Rolls < 17
                     THEN P_Location + NEW.Rolls
                     ELSE NEW.Rolls - (16 - P_Location)
                     END
    WHERE id = NEW.Player_id;
    

    【讨论】:

      猜你喜欢
      • 2015-01-10
      • 1970-01-01
      • 2013-02-06
      • 1970-01-01
      • 1970-01-01
      • 2013-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多