如果那么在select中

时间:2012-06-23 00:26:34

标签: mysql sql if-statement

我正在努力使脚本更快,我决定在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 WHERE Time ='1340252716'附近   第1行Code ='57111'

3 个答案:

答案 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 ;