我已对该网站进行了一些研究,并且没有出现这个确切的问题是重复的,所以这里有...
我在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;
答案 0 :(得分:0)
更新
我将更新简化为基于val1
派生val2
和val3
,因此您不再需要case
或if/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;