gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 20:12:45 25 4
gpt4 key购买 nike

我遇到了一个似乎无法解决的问题。我相当确定 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$$

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

<结论:在版本 5.7.11-log 上似乎有效,但在版本 5.6.32-log 上则不然。剩下要确定的是,这是否只是此版本的一个功能,并在未来的某个版本中消失,也许只是修复语法。

最佳答案

我相信这是因为存在查询中缺少 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 ;

关于mysql - %使用 WHERE NOT EXISTS 将变量插入表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39977805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com