gpt4 book ai didi

关于 WHERE NOT EXISTS 的 MySQL 语法错误

转载 作者:行者123 更新时间:2023-11-30 22:56:47 25 4
gpt4 key购买 nike

我有一个 Chef 配方,用于创建 Unix 用户 ID 并将它们部署到多个节点,以保证唯一性并防止开发人员必须自己跟踪它们。他们只是为应用程序命名,如果该应用程序的 ID 尚不存在,则它会被授予一个唯一的 ID。如果有,它会简单地返回给脚本,并在网络服务器上创建具有适当值的用户帐户。

我有一个带有单个表的 mysql 数据库,名为 application_id_table,它有两列,id 和 application_name。 id 是自动递增的,应用程序名称不能为 null(并且必须是唯一的)。

从我的脚本中删除 Ruby 并进行一些替换,我的 sql 如下所示:

INSERT INTO application_id_table(application_name) VALUES('andy_test') WHERE NOT EXISTS (select 1 from application_id_table WHERE application_name = 'andy_test');

运行时,我收到语法分析错误:

ERROR 1064 (42000): 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 (select 1 from application_id_table WHERE application_name = 'a'

我记得看到 values 语句不允许使用 where 子句,但我不希望使用 select 语句来填充值,因为我是从 Ruby/Chef 中提供的变量填充它们的。任何人都知道如何实现这一点?

最佳答案

您想使用 insert 。 . .选择:

INSERT INTO application_id_table(application_name)
SELECT aname
FROM (SELECT 'andy_test' as aname) t
WHERE NOT EXISTS (select 1 from application_id_table ait WHERE ait.application_name = t.aname);

您应该能够将您的变量直接插入到 select 语句中,就像使用 VALUES 语句一样。

关于关于 WHERE NOT EXISTS 的 MySQL 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26015196/

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