PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment insérer une seule ligne dans la table parent, puis plusieurs lignes dans la table enfant en SQL unique dans PostgreSQL ?

PostgreSQL a une telle interprétation étendue des VALUES clause qu'elle peut être utilisée comme sous-requête par elle-même.

Vous pouvez donc exprimer votre requête sous cette forme :

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;

Cela suppose que vous vouliez insérer le produit cartésien de new_invoice et les valeurs, ce qui est généralement logique si new_invoice est en fait une valeur à une seule ligne.