2

我正在尝试更快地编写脚本,并且我决定在 SQL 中包含一些过去在 PHP 中发生的计算。我必须做一个 if 语句来决定是否使用insertupdate是否需要代码:

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 服务器版本相对应的手册,以在第 1 行的 'IF (EXISTS (SELECT * FROM edentevaWHERE Time='1340252716' and Code='57111'附近使用正确的语法

4

3 回答 3

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

提示:您将正则条件表达式 IF THEN ELSE 与 SQL 查询中的 IF 语句混淆,这是不同的。

于 2012-06-23T00:29:23.733 回答
1

如果上面定义map.mega了一个UNIQUE索引(或者它是 a 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) ;

好的 ole SQL 小提琴:http ://sqlfiddle.com/#!2/9bb19/1

于 2013-04-30T21:45:11.170 回答
0

IF THEN 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 ;
于 2013-04-29T14:14:21.417 回答