根据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
都没有工作。
答案 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
检查并告诉我。