INSERT'100'进入表IF'100'是最高值给出错误

时间:2013-10-03 02:03:06

标签: mysql sql if-statement

根据MySQL documentation,这将运行在mysql.version>但我明白了:

  

#1064 - 您的SQL语法出错;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   在'IF

附近

代码:

IF SELECT MAX(`amount`) FROM transactions < 500 
THEN 
   INSERT INTO transactions (amount) VALUES (500)
END IF

IF( (SELECT MAX(`amount`) FROM transactions < 500)
     ,INSERT INTO transactions (amount) VALUES (500)
     , null
  );

交易表:

id amount
1  100
2  150
3  400

都没有工作。

3 个答案:

答案 0 :(得分:2)

错误的原因是您不能在普通查询中使用IF语句,它可以在存储例程的上下文中使用 (过程,函数,触发器,事件)。

您的第一段代码将在存储过程中成功运行,并带有快速更改

DELIMITER $$
CREATE PROCEDURE insert500()
BEGIN
  IF (SELECT MAX(`amount`) FROM transactions) < 500 -- see parenthesis around select
  THEN 
     INSERT INTO transactions (amount) VALUES (500); -- semicolon an the end
  END IF; -- semicolon an the end
END$$
DELIMITER ;

CALL insert500();

这是 SQLFiddle 演示


现在,这是一种在一个陈述中做你想做的事的方法

INSERT INTO transactions (amount)
SELECT 500
  FROM transactions
HAVING MAX(amount) < 500;

这是 SQLFiddle 演示

答案 1 :(得分:0)

应该是:

IF SELECT MAX(`amount`) FROM transactions WHERE amount < 500 
THEN 
   INSERT INTO transactions (amount) VALUES (500)
END IF

答案 2 :(得分:-1)

怎么样:

SELECT MAX(`amount`) INTO m FROM transactions
IF m < 500
THEN 
   INSERT INTO transactions (amount) VALUES (500)
END IF

检查并告诉我。