首页  >  问答  >  正文

尝试将 CASE/条件语句包装在 MySQL 触发器内

我有一个触发器:

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)

在触发器内。谁能解释一下我该如何做到这一点?

P粉311089279P粉311089279425 天前960

全部回复(1)我来回复

  • P粉956441054

    P粉9564410542023-09-12 11:03:52

    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;

    回复
    0
  • 取消回复