%使用WHERE NOT EXISTS将变量插入表中

时间:2016-10-11 12:58:14

标签: mysql

我遇到了一个我似乎无法解决的问题。我非常确定InserProc的以下定义曾经有效,但现在当我尝试创建它时(尝试使用SQL Fiddle)我遇到了You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE NOT EXISTS。如果这不起作用,如何插入变量首先检查它是否存在使用类似的构造(我知道还有其他可能性)?

CREATE TABLE Test(Id INT);
SELECT @var := 1;
INSERT INTO Test(Id) SELECT @var;

DELIMITER $$
CREATE PROCEDURE InserProc(in _Id INT)
BEGIN
    INSERT INTO Test(Id)
    SELECT _Id  
    WHERE NOT EXISTS
    (
        SELECT 1
        FROM Test
        WHERE Id = _Id
    );
END$$

< edit:编辑短脚本以包含分隔符,使其更加完整。情节变粗,因为SQL Fiddle在语法上也不接受同事的MySQL安装,但在我的机器上它运行得很好。很奇怪!

< conlusion:它出现在版本5.7.11-log上,但是在版本5.6.32-log上却没有。还有待确定的是,如果这只是这个版本的一个特性,并且在未来的某个版本中消失了,也许只是修复了语法。

1 个答案:

答案 0 :(得分:0)

我认为这是因为存在查询中缺少FROM。但是,我想查询是否检查表中是否已存在记录,如果没有,则插入它。下面是另一个例子:

CREATE TABLE Test (Id INT);

DELIMITER //

CREATE PROCEDURE MyProc (IN _Id INT)
BEGIN
   DECLARE total INT;
   select count(*) into total
   from Test where id = _Id;
   if(total = 0) then
     insert into Test(Id) values(_id);
   end if;
END//

DELIMITER ;