sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur infogar man en enda rad i den överordnade tabellen och sedan flera rader i den underordnade tabellen i singel SQL i PostgreSQL?

PostgreSQL har en sådan utökad tolkning av VALUES klausul att den kan användas som en underfråga i sig själv.

Så du kan uttrycka din fråga i det här formuläret:

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;

Det förutsätter att du vill infoga den kartesiska produkten av new_invoice och värdena, vilket mestadels är vettigt om new_invoice är faktiskt ett enradsvärde.



  1. MySQL enorma tabeller JOIN gör att databasen kollapsar

  2. Postgresql regexp_matches inside view returnerar alltid null när den frågas från PHP

  3. Hur försöker man om transaktionen efter ett dödläge med Doctrine?

  4. Laravel / vältalig:kapslad WhereHas