Rumah  >  Soal Jawab  >  teks badan

Cuba bungkus pernyataan CASE/bersyarat di dalam pencetus MySQL

Saya ada pencetus:

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;

Tetapi sintaks tidak betul di sesetengah tempat dan menghasilkan ralat. Saya telah menyemak soalan serupa di tapak ini, tetapi soalan yang saya lihat nampaknya menggunakan kaedah yang nampaknya tidak berkesan dalam kes ini (khususnya menggunakan IF ). Saya harap syarat utama adalah

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

dan bahagian ELSE ialah

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

Di dalam picu. Bolehkah sesiapa menerangkan bagaimana saya boleh melakukan ini?

P粉311089279P粉311089279373 hari yang lalu910

membalas semua(1)saya akan balas

  • P粉956441054

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

    Ungkapan CASE mesti dinilai kepada skalar, tetapi anda menyambungkan klausa lain melalui ungkapan CASE.

    Anda boleh melakukannya supaya hasil CASE mengembalikan skalar dan menetapkan skalar itu kepada lajur 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;

    balas
    0
  • Batalbalas