关于WHERE NOT EXISTS的MySQL语法错误

时间:2014-09-24 10:59:39

标签: mysql

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

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

从我的脚本中删除Ruby并进行一些替换,我的sql看起来像这样:

  

INSERT INTO application_id_table(application_name)VALUES('andy_test')   什么不存在(从application_id_table WHERE中选择1   application_name ='andy_test');

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

  

错误1064(42000):您的SQL语法有错误;检查   手册,对应右边的MySQL服务器版本   在'WHERE NOT EXISTS附近使用的语法(从中选择1)   application_id_table WHERE application_name ='a'

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

2 个答案:

答案 0 :(得分:0)

您想使用insert . . . select

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语句一样。

答案 1 :(得分:0)

试试这个:

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