在MySQL触发器中使用CASE

时间:2016-08-25 04:58:33

标签: mysql sql

我已对该网站进行了一些研究,并且没有出现这个确切的问题是重复的,所以这里有...

我在MySQL中创建一个触发器(插入后),目标是根据第三个字段(val3)的值设置两个值(val1,val2)。我使用CASE因为val3只有5个可能的值。问题是我的语法在MySQL工作台中抛出了错误,特别是:"什么时候不是这个位置的有效输入"。

根据我读过的文档,CASE在MySQL触发器中使用是有效的,因此它必须是我的语法。任何帮助将不胜感激。 (另外,如果有人要求,我也尝试使用IF / IFELSE,但也有错误。任何一个(IF,CASE)都适合我......

这是我现在的代码:

CREATE TRIGGER `trig1` 
AFTER INSERT ON `tbl`
FOR EACH ROW
BEGIN
CASE    
WHEN NEW.val3 = 1 THEN
    UPDATE `tbl`
    SET val3 = NEW.val3,
    val1 = 0,
    val2 = 1;
WHEN NEW.val3 = 2 THEN
    UPDATE `tbl`
    SET val3 = NEW.val3,
    val1 = 0.25,
    val2 = 0.75;
WHEN NEW.val3 = 3 THEN
    UPDATE `tbl`
    SET val3 = NEW.val3,
    val1 = 0.5,
    val2 = 0.5;
WHEN NEW.val3 = 4 THEN
    UPDATE `tbl`
    SET val3 = NEW.val3,
    val1 = 0.75,
    val2 = 0.25;
WHEN NEW.val3 = 5 THEN
    UPDATE `tbl`
    SET val3 = NEW.val3,
    val1 = 1,
    val2 = 0;
END CASE;
END; 

1 个答案:

答案 0 :(得分:0)

  

更新

我将更新简化为基于val1派生val2val3,因此您不再需要caseif/else

    UPDATE `tbl`
    SET val3 = NEW.val3,
    val1 = (NEW.val3-1)/4,
    val2 = 1-((NEW.val3-1)/4);
  

上一个查询

CREATE TRIGGER `trig1` 
AFTER INSERT ON `tbl`
FOR EACH ROW
BEGIN       
    UPDATE `tbl`
    SET val3 = NEW.val3,
    val1 = case NEW.val3 when 1 then 0 when 2 then 0.25 
        when 3 then 0.5 when 4 then 0.75 when 5 then 1 end,
    val2 = case NEW.val3 when 1 then 1 when 2 then 0.75 
        when 3 then 0.5 when 4 then 0.25 when 5 then 0 end
    ;
END;