sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo insertar una sola fila en la tabla principal y luego varias filas en la tabla secundaria en SQL único en PostgreSQL?

PostgreSQL tiene una interpretación tan extendida de los VALUES cláusula que puede usarse como una subconsulta por sí misma.

Por lo que puede expresar su consulta en este formulario:

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;

Eso supone que desea insertar el producto cartesiano de new_invoice y los valores, que en su mayoría tiene sentido si new_invoice es en realidad un valor de una sola fila.