我对SQL还是很陌生,而我得到的只是一个接一个的错误,因此我们将不胜感激。

我有一个标签表:id,name,slug

我用Google搜索过Stackoverflow,但对我来说没有用。如果标签不存在,我会尝试创建一个标签,但无论它是已创建还是存在,都始终返回ID。

INSERT INTO tags (name, slug)
SELECT ('Wow', 'wow')
WHERE NOT EXISTS (SELECT id FROM tags WHERE slug = 'wow')
RETURNING id;

这是我所拥有的:http://sqlfiddle.com/#!15/4050a/18

最佳答案

不要将列放在括号中。

如果您查看得到的完整错误消息,则Postgres实际上会告诉您哪里出了问题。



表达式('Wow', 'wow')仅是一列,是带有两个变量的匿名“记录”(有关详细信息,请参见the manual)

INSERT INTO tags (name, slug)
SELECT 'Wow', 'wow'
WHERE NOT EXISTS (SELECT id FROM tags WHERE slug = 'wow')
RETURNING id;

通常,仅当括号确实是必需的时才添加括号是一个好主意

关于sql - PostgreSQL插入如果不存在,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27083330/

10-10 09:21