2017-07-22 15 views
1

在MySQL的触发,我写了这样的条款:为什么这个CASE ... END CASE子句在MySQL的触发器中导致错误提示?

CASE v_index 
    WHEN 1 THEN: 
     UPDATE `device` SET `filter1_left` = `filter1_left` + 1 WHERE `id` = 100; 
    WHEN 2 THEN: 
     UPDATE `device` SET `filter2_left` = `filter2_left` + 1 WHERE `id` = 100; 
    WHEN 3 THEN: 
     UPDATE `device` SET `filter3_left` = `filter3_left` + 1 WHERE `id` = 100; 
    WHEN 4 THEN: 
     UPDATE `device` SET `filter4_left` = `filter4_left` + 1 WHERE `id` = 100; 
    WHEN 5 THEN: 
     UPDATE `device` SET `filter5_left` = `filter5_left` + 1 WHERE `id` = 100; 
END CASE; 

但我不能成功地创建这个触发器,收到以下错误提示:

错误代码:1064 你有一个错误你的SQL语法;检查对应于你的MySQL服务器版本使用附近的正确语法手册“:UPDATE device SET filter1_left = filter1_left + 1”在第17行

顺便说一下,我有三个问题:

  1. 我觉得上面的那句话有点冗长。是否有任何方法可以简化它并更优雅地实现相同的目标?

  2. 可以在'THEN'之后省略冒号吗?

  3. 我可以把UPDATE ...语句放在'WHEN ... THEN'的同一行吗?

在此先感谢!

+1

“THEN”后没有冒号':',所以删除所有冒号 –

+0

非常感谢!它解决了我的问题。但是我对“Beginning PHP and MySQL From Novice to Professional”一书感到困惑(由W. Jason Gilmore,Apress 2010撰写),其中说'THEN'后应该有一个冒号。哇,它怎么可能? @RacilHilan – Benson

回答

1

没有冒号:THEN后,所以删除所有这些冒号。

我觉得上面的那句话很冗长。是否有任何方法可以简化它并更优雅地实现相同的目标?

我开始写它,但戈登Linoff打我(如往常:-)),所以看到他的答案。

可以在'THEN'之后省略冒号吗?

你不能,你必须:-)

我可以把UPDATE ...句话在同一行的 'WHEN ... THEN'?

是的。 SQL一般不关心空白,所以空格或换行符都是一样的。

+0

非常感谢!你对我的每一个问题都如此小心谨慎地回答,如此幽默,清楚地回答。你真好!但是我对“Beginning PHP and MySQL From Novice to Professional”一书感到困惑(由W. Jason Gilmore,Apress 2010撰写),其中说'THEN'后应该有一个冒号。哇,它怎么可能? @RacilHilan – Benson

1

可能修复数据结构,所以你有五行而不是五列。但你也可以做到这一点的一个update

UPDATE device 
    SET filter1_left = filter1_left + (CASE WHEN v_index = 1 THEN 1 ELSE 0 END), 
     filter2_left = filter2_left + (CASE WHEN v_index = 2 THEN 1 ELSE 0 END), 
     filter3_left = filter3_left + (CASE WHEN v_index = 3 THEN 1 ELSE 0 END), 
     filter4_left = filter4_left + (CASE WHEN v_index = 4 THEN 1 ELSE 0 END), 
     filter5_left = filter5_left + (CASE WHEN v_index = 5 THEN 1 ELSE 0 END) 
    WHERE `id` = 100 AND v_index IN (1, 2, 3, 4, 5); 
+0

非常感谢!你真好。谢谢!但是我对“Beginning PHP and MySQL From Novice to Professional”一书感到困惑(由W. Jason Gilmore,Apress 2010撰写),其中说'THEN'后应该有一个冒号。哇,它怎么可能?@GordonLinoff – Benson