我正在努力使脚本更快,我决定在SQL内部包含一些以前在PHP中发生的计算。如果需要代码,我必须制作if语句,决定是使用insert
还是update
:
IF (EXISTS (SELECT * FROM `edenteva` WHERE `Time`='1340252716' and `Code`='571119'))
THEN IF (EXISTS (SELECT * FROM `map` WHERE `mega`='571119'))
THEN UPDATE `map` SET `edenteva`='571119' WHERE `mega`='571119'
ELSE INSERT INTO `map`(`mega`,`edenteva`) VALUES ('571119','571119');
但是,我收到语法错误,你能看出错误吗?
1064 - 您的SQL语法出错;检查与MySQL服务器版本对应的手册,以获得正确的语法 'IF(EXISTS(SELECT * FROM
edenteva
WHERETime
='1340252716'附近 第1行Code
='57111'
答案 0 :(得分:2)
嗯,你在问题中给出答案:check the manual
......
IF声明:http://dev.mysql.com/doc/refman/5.5/en/if-statement.html
EXISTS声明:http://dev.mysql.com/doc/refman/5.0/en/exists-and-not-exists-subqueries.html
提示:如果在SQL查询中使用IF语句,那么你会混淆常规条件表达式,这是不同的。
答案 1 :(得分:1)
如果map.mega
上定义了UNIQUE
索引(或者是PRIMARY KEY
),我们可以使用ON DUPLICATE KEY UPDATE
:
INSERT INTO TABLE map (mega, edenteva)
VALUES ('571119','571119')
ON DUPLICATE KEY UPDATE edenteva = '571119';
如果我们只想在另一个表中有一行时进行更新或插入,我们可以使用另一个表作为值的来源:
INSERT INTO map (mega, edenteva)
SELECT code, code
FROM edenteva
WHERE time = '1340252716' AND code = '571119'
ON DUPLICATE KEY UPDATE edenteva = VALUES(edenteva) ;
Good ole SQL Fiddle:http://sqlfiddle.com/#!2/9bb19/1
答案 2 :(得分:0)
如果那么ELSE用于mysql域中的存储程序......
所以只能这样使用:(所以没有好消息为你或其他人期待更多......
DELIMITER //
CREATE FUNCTION SimpleCompare(n INT, m INT)
RETURNS VARCHAR(20)
BEGIN
DECLARE s VARCHAR(20);
IF n > m THEN SET s = '>';
ELSEIF n = m THEN SET s = '=';
ELSE SET s = '<';
END IF;
SET s = CONCAT(n, ' ', s, ' ', m);
RETURN s;
END //
DELIMITER ;