Postgresql insert if not exists
我对SQL非常陌生,我所得到的只是一个接一个的错误,所以任何帮助都会很感激。
我有个标签表:身份证,名字,鼻涕虫
我在stackoverflow上搜索过google,但没什么对我有用的。我试图创建一个标签,如果它不存在,但总是返回ID,无论它是创建的还是存在的。
1 2 3 4 | INSERT INTO tags (name, slug) SELECT ('Wow', 'wow') WHERE NOT EXISTS (SELECT id FROM tags WHERE slug = 'wow') RETURNING id; |
以下是我的资料:http://sqlpiddle.com/!15/4050A/18
不要将列放在括号中。
如果你看到你得到的全部错误信息,那么Postgres实际上会告诉你出了什么问题。
ERROR: INSERT has more target columns than expressions
Hint: The insertion source is a row expression containing the same number of columns expected by the INSERT. Did you accidentally use extra parentheses?
表达式
1 2 3 4 | INSERT INTO tags (name, slug) SELECT 'Wow', 'wow' WHERE NOT EXISTS (SELECT id FROM tags WHERE slug = 'wow') RETURNING id; |
一般来说,最好只在确实需要括号的情况下添加括号。
(1)拆下支架即可。这应该能解决你的问题。
1 2 3 4 | INSERT INTO tags (name, slug) SELECT 'Wow', 'wow' WHERE NOT EXISTS (SELECT id FROM tags WHERE slug = 'wow') RETURNING id; |
(2)试试这个。也应该这样做(即使是来自正如其他人指出的那样,实际上并不需要子句)。
1 2 3 4 5 | INSERT INTO tags (name, slug) SELECT 'Wow', 'wow' FROM tags WHERE NOT EXISTS (SELECT id FROM tags WHERE slug = 'wow') LIMIT 1 RETURNING id; |