Ich möchte eine Bulk-Insert-Transaktion durchführen, aber ich bin mir nicht sicher, wie dies mit CTEs oder einer effizienteren Methode zu tun ist. Das ist, was ich habe, so weit:Wie füge ich mehrere Zeilen mit einem Fremdschlüssel mit einem CTE in Postgres ein?
with bulky as (
insert into products (title, description, price)
values ('Dope product 1', 'Buy diz', 9.99),
('Dope product 2', 'Buy diz', 8.99),
('Dope product 2', 'Buy diz', 7.99)
returning id
)
insert into product_metadata (product_id, sales_volume, date)
values (???, 80, '2017-03-21'),
(???, 50, '2017-03-21'),
(???, 70, '2017-03-21');
Das Problem mit meinem CTE ist, ich weiß nicht, wie die einzelnen IDs von der ersten Insert-Anweisung zu bekommen, um für die zweite Anweisung in ihre entsprechenden Datensätze eingefügt werden, hat Der Fremdschlüssel 'product_id'.
Wie würde ich die Anweisung konstruieren, damit sie funktioniert? Ich bin offen für alternative Lösungen, die eine effizientere Methode bieten, um das gleiche Ergebnis zu erzielen.
Bearbeiten Sie Ihre Frage und zeigen die Zeilen, die Sie in die zweite Tabelle eingefügt werden sollen. –
@GordonLinoff Dies sind die Zeilen, die ich in die Tabelle product_metadata einfügen möchte: (ID FOR 'Dope product 1', 80, '2017-03-21'), (ID FÜR 'Dope product 2', 50, '2017-03 -21 '), (ID FOR' Dope product 3 ', 70,' 2017-03-21 '). Würde Ihre vorgeschlagene Antwort funktionieren, wenn Sie den Titel beitreten (i.title = v.title)? Du verweisst nicht die ID von der ersten Einfügung, also bin ich nicht sicher, ob es funktionieren würde – Jamaal
Jamaal: @Gordon macht das 'JOIN' auf dem Titel (i.title = v.Titel) Das Problem ist, dass Sie nicht zwei der gleichen Elemente auf der ersten einfügen können. Ich habe eine Lösung gefunden, um das zu lösen, aber es ist wirklich chaotisch. Mein Vorschlag: Fügen Sie Produkt und Metadaten einzeln ein. –