PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie fügt man eine einzelne Zeile in die übergeordnete Tabelle und dann mehrere Zeilen in die untergeordnete Tabelle in Single SQL in PostgreSQL ein?

PostgreSQL hat eine solche erweiterte Interpretation der VALUES Klausel, dass sie als eigene Unterabfrage verwendet werden kann.

Sie können Ihre Anfrage also in dieser Form formulieren:

WITH new_invoice AS (
    INSERT INTO ...
    RETURNING id
),
v(a,b,c,d) AS (values
  ($27,$28,$29,$30),
  ($31,$32,$33,$34),
  ...
)
INSERT INTO invoiceItems (invoice_id, name, qty, price, description)
 SELECT new_invoice.id, a,b,c,d FROM v, new_invoice;

Das setzt voraus, dass Sie das kartesische Produkt von new_invoice einfügen möchten und die Werte, was meistens Sinn macht, wenn new_invoice ist eigentlich ein einzeiliger Wert.