sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan indsætter jeg flere rækker med en fremmednøgle ved hjælp af en CTE i Postgres?

Følgende er en rimelig fortolkning af, hvad du vil gøre:

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æggende svar er "brug returning * og brug en join for at få værdierne". Jeg var nødt til at ændre titlerne, så de er unikke.



  1. Sådan beregner du fastholdelse måned over måned ved hjælp af SQL

  2. SQL Hvor ENHVER kolonne er lig med en værdi

  3. Vælg / Indsæt version af en Upsert:er der et designmønster for høj samtidighed?

  4. Brug af et Alias ​​i en WHERE-klausul