7

当试图使用该WHERE NOT EXISTS子句来防止在列中添加具有重复值的行时age,我得到了错误syntax error at or near "WHERE"

为什么会抛出语法错误?我正在使用 Postgresql 9.1。

SQL

INSERT INTO live.users ("website", "age") 
values ('abc', '123')
WHERE NOT EXISTS (SELECT age FROM live.users WHERE age = 123);

错误

ERROR:  syntax error at or near "WHERE"
LINE 6: WHERE NOT EXISTS (SELECT age FROM live.users W...
4

4 回答 4

32

改为:

INSERT INTO live.users ("website", "age") 
SELECT 'abc', 123
WHERE NOT EXISTS (SELECT age FROM live.users WHERE age = 123);
于 2013-04-05T18:28:35.540 回答
3
INSERT INTO live.users ("website", "age") 
select 'abc', '123'
WHERE NOT EXISTS (SELECT age FROM live.users WHERE age = 123);
于 2013-04-05T18:30:26.830 回答
0

WHERE field NOT EXISTS在 PLPGSQL 中使用时遇到了一些问题。相反,效果很好的是WHERE field NOT IN,使用后我没有收到任何功能错误。

于 2014-05-02T20:35:26.933 回答
0

我看到您要求使用 v9.1,但从PostgreSQL v9.5 开始到现在已经 4 年了 - INSERT为您提供了ON CONFLICT … DO NOTHING选项:

INSERT INTO live.users("website", "age") VALUES('abc', '123') ON CONFLICT ("age") DO NOTHING

值得注意的是,这需要在目标表上设置相应的约束——但在大多数情况下,我想你无论如何都会拥有它。否则你会得到:

ERROR:  there is no unique or exclusion constraint matching the ON CONFLICT specification
于 2017-07-13T07:46:00.757 回答