Postgresql insérer si n'existe pas
Je suis très nouveau pour SQL, et tout ce que j'obtiens est une erreur après erreur, de sorte que toute aide serait appréciée.
J'ai une table tags: id, nom, slug
J'ai Google avait fouillé sur Stackoverflow, mais rien ne fonctionne pour moi. Je suis en train de créer un tag s'il n'existe pas, mais toujours retourner l'ID de savoir si elle est créée ou existe.
INSERT INTO tags (name, slug)
SELECT ('Wow', 'wow')
WHERE NOT EXISTS (SELECT id FROM tags WHERE slug = 'wow')
RETURNING id;
Voici ce que j'ai: http://sqlfiddle.com/#!15/4050a/18
Double Possible de Postgres: INSÉRER si elle n'existe pas déjà
OriginalL'auteur daryl | 2014-11-22
Vous devez vous connecter pour publier un commentaire.
Ne pas mettre les colonnes entre parenthèses.
Si vous regardez le message d'erreur complet que vous obtenez, puis Postgres en fait vous dit ce qui n'allait pas.
L'expression
('Wow', 'wow')
est juste un unique colonne, un anonyme, un "record" avec deux variables (Voir le manuel pour plus de détails)En général c'est une bonne idée d'ajouter des parenthèses que si elles sont vraiment nécessaire
insert
spécifie deux colonnes alors que laselect
n'a qu'une seule colonne ainsi, il génère une erreur: "INSERT a plus de cible de colonnes que les expressions". . Je vous remercie, que le clarifie.
OriginalL'auteur a_horse_with_no_name
(1) supprimer les crochets. Cela devrait résoudre votre problème.
(2) de l'Essayer. Qui devrait aussi le faire (même si un DE
la clause n'est pas réellement nécessaire, comme d'autres l'ont souligné).
Mais ma réponse précédente était meilleure, c'est trop verbeux, trop de choses inutiles ici.
Bien sûr, NP 🙂 Pas de soucis.
OriginalL'auteur peter.petrov