MySQL 5.5查询基于IF语句

时间:2012-07-28 19:11:42

标签: mysql if-statement phpmyadmin procedure case-statement

我一直在与这个争斗太久,所以我来这里寻求帮助......

我有一个MySQL存储过程,我想执行以下操作:

给定给定记录的'id'和'username'

  1. 如果表中不存在id,则创建记录
  2. 如果id存在且用户名与存在的用户名不同,则更新记录
  3. 别无所事
  4. 我尝试了以下内容:

    BEGIN
    
    DECLARE doCreate INT;
    DECLARE doUpdate INT;
    SELECT COUNT(*) INTO doCreate FROM app_user WHERE id=1;
    IF (doCreate > 0) THEN 
       SELECT COUNT(*) INTO doUpdate FROM app_user WHERE id=1 AND username='other';
    END IF
    
    IF(doCreate = 0) THEN ---SYNTAX ERROR ON THIS LINE---
       SELECT 'CREATE';
    ELSE IF(doUpdate = 0) THEN
       SELECT 'UPDATE';
    ELSE
       SELECT 'NOTHING';
    END IF
    
    END
    

    我也尝试用case语句替换if-elseif-else块但得到相同的结果......

    CASE ---ERROR ON THIS LINE---
       WHEN doCreate = 0 THEN 
          SELECT 'CREATE';
       WHEN doUpdate = 0 THEN
          SELECT 'UPDATE';
       ELSE
          SELECT 'NOTHING';
    END
    
    • 我似乎在第一个END IF之后的任何内容上都会出现语法错误,因此这是第一个出现的问题......

    任何帮助都会受到赞赏 - 我相信有更好的方法可以做到这一点。

1 个答案:

答案 0 :(得分:2)

我认为您需要使用END IF终止;,内部ELSEIF应该是一个字。否则,需要另一个END IF,但找不到。

IF (doCreate > 0) THEN 
   SELECT COUNT(*) INTO doUpdate FROM app_user WHERE id=1 AND username='other';
END IF; /* terminate with ; */

IF(doCreate = 0) THEN 
   SELECT 'CREATE';
ELSEIF(doUpdate = 0) THEN
   SELECT 'UPDATE';
ELSE
   SELECT 'NOTHING';
END IF; /* terminate with ; */

查看MySQL IF/ELSE syntax reference了解各种用法示例。