首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL IF THEN AS语法

MySQL IF THEN AS语法
EN

Stack Overflow用户
提问于 2019-08-13 03:08:29
回答 2查看 667关注 0票数 0

我正在尝试通过存储过程填充一个表,如下所示:

代码语言:javascript
复制
SET @resultsCount = (SELECT COUNT(*) FROM tableA);
SET @i = 0;  

WHILE @i < @resultscount DO
  SET @revNum = 0;
  INSERT INTO tableB (Name, revNumber, Meta)
  SELECT
    name AS Name,
    (IF @i=0 THEN  
      SELECT @revNum;
    ELSE IF <condition> THEN
      SET @revNum = @revNum +1;
      SELECT @revNum;
    ELSE
      SELECT @revNum;  
    END IF) AS revNumber,
    meta AS Meta
  FROM tableA;
  SET @i = @i + 1;
END WHILE; 

但是,上面的IF语句由于语法错误而失败。我尝试使用IF函数或case语句,但它们似乎只允许在每个条件之后执行一条语句,并且我需要在两个单独的语句中执行一个SET,然后执行一个SELECT。

EN

回答 2

Stack Overflow用户

发布于 2019-08-13 03:12:24

通过使用ELSE IF,您可以启动一个新的IF语句,该语句永远不会END IF (您只需END IF一次)。将其更改为ELSEIF

代码语言:javascript
复制
IF @i=0 THEN  
  SELECT @revNum;
ELSEIF <condition> THEN
  SET @revNum = @revNum +1;
  SELECT @revNum;
ELSE
  SELECT @revNum;  
END IF
票数 0
EN

Stack Overflow用户

发布于 2019-08-13 03:16:20

您不能在查询中使用像IF THEN这样的过程性特性;相反,可以尝试使用等价的查询,比如IF(<condition>, <true case>, <false case>)CASE WHEN <condition1> THEN <value1|expression1> WHEN <condition2> THEN <value2|expression2> ELSE <valueX|expressionX> END

基本上,如果查询中有一个;,而不仅仅是字符串的一部分,那么就会出现问题。

在您的情况下,我会将所有这些转换为以下内容:

IF(@i=0, @revNum, IF(<condition>, @revNum := @revNum + 1, @revNum)) AS revNumber

@revNum = @revNum + IF(@i <> 0 AND <condition>,1,0) AS revNumber

第一个版本是一个更直接的翻译,但第二个版本可能更安全,因为你可能会有一些奇怪的行为,因为你在条件表达式中对@/session变量赋值不小心。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57466911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档