2

我意识到在同一主题上有很多已回答的 SO 问题,但我似乎无法使用任何这些信息来找出我的查询出了什么问题。

database_owner仅当具有相同和database_name(这是我的两个列名)的记录不存在时,我才尝试将记录插入我的表中。

我正在使用查询:

INSERT INTO users_databases (database_name, database_key, database_secret, database_owner) 
VALUES ('DB1', '263f690d-7ac3-49f2-aa3b-f5672e4639a2', '367123d8-e5a7-46a0-8101-21f39e6ac8d9', 'x@x.com') 
WHERE
   NOT EXISTS 
   (SELECT database_name FROM uses_databases WHERE database_name = 'DB1' AND database_owner = 'x@x.com');

但我得到了错误Incorrect syntax near the keyword 'WHERE'.

我还应该指出,运行查询

SELECT database_name 
FROM uses_databases 
WHERE database_name = 'DB1' AND database_owner = 'x@x.com' 

确实返回记录。

我哪里会出错?从我在其他问题中读到的内容来看,这看起来是正确的。但显然不是。:-) 任何建议都会非常有帮助。

4

3 回答 3

18

最简单的解决方案是这样的:

IF NOT EXISTS (SELECT database_name FROM uses_databases WHERE database_name = 'DB1' AND database_owner = 'x@x.com')
    INSERT INTO users_databases (database_name, database_key, database_secret, database_owner) 
    VALUES ('DB1', '263f690d-7ac3-49f2-aa3b-f5672e4639a2', '367123d8-e5a7-46a0-8101-21f39e6ac8d9', 'x@x.com');
于 2013-09-08T22:49:36.827 回答
2

您可以执行以下操作,必须工作

  INSERT INTO users_databases (database_name, database_key, database_secret,    database_owner) 
  VALUES ('DB1', '263f690d-7ac3-49f2-aa3b-f5672e4639a2', '367123d8-e5a7-46a0-8101- 21f39e6ac8d9', 'x@x.com') 
  WHERE 1
        NOT IN 
       (SELECT 1 FROM uses_databases WHERE database_name = 'DB1' AND database_owner = 'x@x.com');
于 2013-09-09T00:41:41.013 回答
1

你也可以做

INSERT INTO users_databases (database_name, database_key, database_secret, database_owner) 
SELECT 'DB1', '263f690d-7ac3-49f2-aa3b-f5672e4639a2', 
 '367123d8-e5a7-46a0-8101-21f39e6ac8d9', 'x@x.com'
 WHERE
   NOT EXISTS 
   (SELECT database_name 
    FROM uses_databases 
     WHERE database_name = 'DB1' AND database_owner = 'x@x.com'
    )
于 2013-09-08T22:54:27.580 回答