嘗試將 CASE/條件語句包裝在 MySQL 觸發器內
P粉311089279
P粉311089279 2023-09-11 20:55:31
0
1
1011

我有一個觸發器:

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;
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板