, sind 9.6 einige Tabellen in Postgres hier Zur Veranschaulichung:für mehr Spalten als notwendig für Einsatz Auswahl in Anweisung RÜCKKEHR
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
Ich möchte mehrere Werte in people_in_group einzufügen, und haben die Gruppennamen zurück mich. Ich habe bereits die person_id (2). Folgendes funktioniert, gibt aber den Namen nicht zurück.
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 *;
Wenn ich name
zum SELECT
Klausel hinzufügen, ich werde INSERT has more expressions than target columns
bekommen. Gibt es eine Möglichkeit name
aus der mir zurückgegebenen Gruppentabelle (über die RETURNING
Klausel) zu haben? Ich weiß, dass ich die Gruppennamen übergebe, aber die obige Abfrage würde nicht für 'xxx' (duplicate key) und 'not there' (keine solche Gruppe) einfügen, so würde es nur 'yyy' zurückgeben. Idealerweise würde ich gerne wissen wollen, warum bestimmte INSERTs
gescheitert sind, aber ich nehme was ich bekommen kann.