尝试将 CASE/条件语句包装在 MySQL 触发器内
P粉311089279
P粉311089279 2023-09-11 20:55:31
0
1
967

我有一个触发器:

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粉311089279
P粉311089279

全部回复(1)
P粉956441054

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;
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板