sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur infogar jag flera rader med en främmande nyckel med en CTE i Postgres?

Följande är en rimlig tolkning av vad du vill göra:

with i as (
      insert into products (title, description, price)
          values ('Dope product 1', 'Buy diz', 9.99),
                 ('Dope product 2', 'Buy diz', 8.99),
                 ('Dope product 3', 'Buy diz', 7.99)
          returning *
     ) 
insert into product_metadata (product_id, sales_volume, date)
    select i.product_id, v.sales_volume, v.date
    from (values ('Dope product 1', 80, '2017-03-21'),
                 ('Dope product 2', 50, '2017-03-21'), 
                 ('Dope product 3', 70, '2017-03-21')
         ) v(title, sales_volume, date) join
         i
         on i.title = v.title;

Det grundläggande svaret är "använd returning * och använd en join för att få värdena". Jag behövde ändra titlarna så att de är unika.



  1. Kan inte ansluta till heroku postgresql-databas från lokal nodapp med uppföljare

  2. Databasinsättningsmekanism

  3. Använda ADO asynkront i Microsoft Access för att snabba upp formulär

  4. ORACLE Connect by klausul motsvarande i SQL Server