搜尋

首頁  >  問答  >  主體

嘗試將 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粉311089279446 天前978

全部回覆(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
  • 取消回覆