PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come inserire una singola riga nella tabella padre e quindi più righe nella tabella figlio in un singolo SQL in PostgreSQL?

PostgreSQL ha un'interpretazione così estesa dei VALUES clausola che può essere utilizzata da sola come subquery.

Quindi puoi esprimere la tua domanda in questo modulo:

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;

Ciò presuppone che tu voglia inserire il prodotto cartesiano di new_invoice e i valori, che per lo più ha senso se new_invoice è in realtà un valore a riga singola.