Pour illustrer, voici quelques tables à Postgres 9.6:Sélection plus de colonnes que nécessaire pour l'insertion pour une utilisation dans l'instruction RETOURNER
people
id | name
----+------
1 | a
2 | b
3 | c
4 | d
groups
id | name
----+-------
10 | xxx
20 | yyy
30 | zzz
people_in_group
person_id | group_id
----------+-------
1 | 10
2 | 10
Je voudrais insérer plusieurs valeurs dans people_in_group, et ont les noms de groupe sont retournés à moi. J'ai déjà le person_id (2). Les travaux suivants, mais ne renvoie pas le nom.
INSERT INTO people_in_group(person_id, group_id)
SELECT '2' AS person_id, id as group_id FROM groups
WHERE name IN ('xxx', 'yyy', 'not there')
ON CONFLICT DO NOTHING
RETURNING *;
Si j'ajoute name
à la clause SELECT
, je vais INSERT has more expressions than target columns
. Est-il possible d'avoir name
à partir de la table de groupes retourné à moi (via la clause RETURNING
)? Je sais que je passe dans les noms de groupe, mais la requête ci-dessus échouerait à insérer pour 'xxx' (clé en double), et 'pas là' (pas de tel groupe), donc il ne retournerait que 'yyy'. Idéalement, je voudrais savoir pourquoi certains INSERTs
ont échoué, mais je vais prendre ce que je peux obtenir.