【问题标题】:MySQL 5.5 Query Based on IF statementMySQL 5.5 基于 IF 语句的查询
【发布时间】:2012-07-28 19:11:42
【问题描述】:

我已经为此苦苦挣扎了太久,所以我在这里寻求帮助......

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

给定记录的“id”和“用户名”

  1. 如果表中不存在id,则创建记录
  2. 否则,如果 id 存在且用户名与存在的用户名不同,则更新记录
  3. 否则什么都不做

我尝试了以下方法:

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 之后出现的任何内容都出现语法错误,所以这是出现的第一个问题...

任何帮助将不胜感激 - 我确信有更好的方法来做到这一点。

【问题讨论】:

  • 一个更简单的方法是使用INSERT (id,username) INTO app_user VALUES ({id},{username}) ON DUPLICATE KEY UDPATE username = VALUES(username)
  • Vatev,我认为使用您的解决方案,如果 id 存在,它将始终执行更新。如果所有字段都相同,我不希望它执行更新。
  • 是的,它会的。我认为我应该建议它,因为它以更简单的方式与您的存储过程做类似的事情。

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


【解决方案1】:

我相信您需要用; 终止END IFs,并且在内部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 了解各种用法示例。

【讨论】:

  • 谢谢!.. 这似乎摆脱了最初的语法错误......但是我现在在最后一行(在 END)得到一个。
  • ELSEIF ... 一个字 :) 感谢您的参考。
  • @Cailen 是的,我没有注意到ELSEIF。否则,它会期待另一个 END IF 在那里找不到。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-26
  • 2013-08-06
相关资源
最近更新 更多