0

根据MySQL 文档,这将在 mysql.version > 5 上运行。但我得到:

#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

都不工作。

4

3 回答 3

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演示

于 2013-10-03T02:21:22.990 回答
0

那应该是:

IF SELECT MAX(`amount`) FROM transactions WHERE amount < 500 
THEN 
   INSERT INTO transactions (amount) VALUES (500)
END IF
于 2013-10-03T02:06:44.877 回答
-1

怎么样:

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

检查并告诉我。

于 2013-10-03T02:17:42.300 回答