【问题标题】:MySQL IF...THEN syntax errorMySQL IF...THEN 语法错误
【发布时间】:2014-12-29 13:03:48
【问题描述】:

我一直在尝试使用 MySQL (v5.6.13) 中的 IF 语句,但没有成功。我最终将我的代码缩减为下面的简单示例,但仍然无法正常工作:

IF 10>1 THEN
    SELECT 10;
END IF;

当我运行它时,它给了我以下错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL
server version for the right syntax to use near 'IF 10>1 THEN
    SELECT 10' at line 1

我确实想知道这是否与我正在使用的 MySQL 客户端(Sequel Pro)有关,但我从命令行运行时得到完全相同的消息。

我是否犯了一些我看不到的可笑的简单错误?或者有人对可能导致错误的原因有任何建议吗?任何帮助将不胜感激!

【问题讨论】:

  • 您只能在程序块中使用if,例如存储过程、函数和触发器。在其他情况下无法识别。
  • 但是,有一个内联 if 语句。很好的例子:timmurphy.org/2009/08/13/inline-if-and-case-statements-in-mysql
  • 感谢@GordonLinoff - 非常有帮助!现在重新阅读文档,这一点在那里是可以理解的,但没有什么地方特别明确(嗯,IMO!)。

标签: mysql if-statement syntax


【解决方案1】:

@Gordon Linoff's comment 所示,MySQL 的IF statement 仅在stored programs 内有效(即存储在其中的代码,然后由 MySQL 调用以响应特定条件);也就是说,它不能以您尝试的方式使用。

但是,很少需要在 SQL 中使用IF

这对于熟悉过程语言的人来说可能看起来很奇怪(其中一个人的代码描述了要执行的算法和过程步骤 - 因此控制流结构如“if...then...else”是无价的),但 SQL 是一种声明性语言(其中一个人的代码描述了期望的结果,而不是应该如何实现该结果——因此尝试使用控制流结构几乎可以肯定是由于对语言的误解)。

例如,在程序语言中,人们可能会告诉计算机进行比较,检查结果,然后在结果满足特定条件时输出一个值:

for each x in Set
  if x < 10 then
    output x

相比之下,在声明性语言中,人们只是告诉计算机想要什么结果:

output x from Set if x < 10

或者,在 SQL 中:

SELECT column_name FROM table_name WHERE column_name < 10

【讨论】:

    猜你喜欢
    • 2019-12-19
    • 2015-08-20
    • 2011-11-15
    • 1970-01-01
    • 2016-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-15
    相关资源
    最近更新 更多