PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como inserir uma única linha na tabela pai e depois várias linhas na tabela filho em um único SQL no PostgreSQL?


O PostgreSQL tem uma interpretação tão estendida dos VALUES cláusula que pode ser usada como uma subconsulta por si só.

Então você pode expressar sua consulta neste formulário:
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;

Isso pressupõe que você deseja inserir o produto cartesiano de new_invoice e os valores, que fazem sentido principalmente se new_invoice é na verdade um valor de linha única.