我的 MySQL CASE/WHEN 语法有啥问题?
Posted
技术标签:
【中文标题】我的 MySQL CASE/WHEN 语法有啥问题?【英文标题】:What is wrong with my MySQL CASE/WHEN syntax?我的 MySQL CASE/WHEN 语法有什么问题? 【发布时间】:2012-08-21 10:14:55 【问题描述】:我正在尝试学习一些新的 mysql 语法,但遇到了麻烦。这应该很简单...
我在这里按照手册进行操作: http://dev.mysql.com/doc/refman/5.5/en/case.html
但我不断收到语法错误。这是我的日常:
# Drop anonymous accounts, if any
USE mysql;
CASE (SELECT COUNT(*) FROM user WHERE User = '' AND Host = 'localhost')
WHEN 1 THEN
DROP USER ''@'localhost';
FLUSH PRIVILEGES;
END CASE;
错误是:
ERROR 1064 (42000):您的 SQL 语法有错误;检查 与您的 MySQL 服务器版本相对应的手册 'CASE (SELECT COUNT(*) FROM user WHERE User = '' 附近使用的语法 AND 主机 = 'localhost')
提前致谢。
【问题讨论】:
【参考方案1】:在查看了您对固定语句但立即第二个问题的评论后,很明显您没有在存储过程或函数中使用它。 flow control statements
的文档非常巧妙地指出它们需要在存储过程/函数中。
将您的代码更新到一个过程中,然后调用该过程来执行:
USE mysql;
DROP PROCEDURE p;
DELIMITER |
CREATE PROCEDURE p() BEGIN
CASE (SELECT COUNT(*) FROM user WHERE User = '' AND Host = 'localhost')
WHEN 1 THEN
DROP USER ''@'localhost';
FLUSH PRIVILEGES;
ELSE
SELECT 'no users found!';
END CASE;
END;
|
CALL p();
还请注意,我添加了一个包罗万象的ELSE
块;如果您没有捕捉到该值,CASE
将抛出“未找到案例”警告 - 这可能是可取的,也可能不是可取的。
【讨论】:
好的,你的 CASE/WHEN 语法工作了!现在 DROP USER ''@'localhost';抛出语法错误?这应该很简单...? @AdamFriedman 啊 - 我现在看到了真正的问题,这是一个完全不同的问题,这实际上意味着您原来的CASE
-statement 是正确的。您没有在过程或函数中使用CASE
- 这是一项要求。我会更新我的答案以反映。
您的解决方案有效。我去了兔子洞。现在我必须了解存储过程。非常感谢你把我带到这里——我想。 ;)以上是关于我的 MySQL CASE/WHEN 语法有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章