Grouped result insert into two tables

前端 未结 1 1387
借酒劲吻你
借酒劲吻你 2021-01-16 23:33

I have the following table.

CREATE TEMPORARY TABLE temp_detail
(
  purchase_order_detail_id INTEGER,
  item_id integer,
  qty numeric(18,2),
  project_id int         


        
相关标签:
1条回答
  • 2021-01-16 23:54

    Assuming this schema:

    create table master (
        master_id serial primary key,
        project_id int,
        category_id int,
        supplier_id int
    );
    create table detail (
        detail_id int,
        item_id int,
        qty numeric(18,2),
        rate numeric(18,2),
        master_id int references master (master_id)
    );
    create temporary table temp_detail (
        purchase_order_detail_id integer,
        item_id integer,
        qty numeric(18,2),
        project_id integer,
        category_id integer,
        supplier_id integer,
        rate numeric(18,2)
    );
    

    This will do it:

    with d as (
        insert into master (project_id, category_id, supplier_id)
        select distinct project_id, category_id, supplier_id
        from temp_detail
        returning *
    )
    insert into detail (item_id, qty, rate, master_id)
    select item_id, qty, rate, master_id
    from
        temp_detail td
        inner join
        d on (td.project_id, td.category_id, td.supplier_id) = (d.project_id, d.category_id, d.supplier_id)
    ;
    
    0 讨论(0)
提交回复
热议问题