我对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/