我想进行批量插入事务,但是我不太确定如何使用CTE或更有效的方法来执行此操作。这是我到目前为止的内容:
with bulky as ( insert into products (title, description, price) values ('Dope product 1', 'Buy diz', 9.99), ('Dope product 2', 'Buy diz', 8.99), ('Dope product 2', 'Buy diz', 7.99) returning id ) insert into product_metadata (product_id, sales_volume, date) values (???, 80, '2017-03-21'), (???, 50, '2017-03-21'), (???, 70, '2017-03-21');
我的CTE的问题是我不知道如何从要插入的第一条插入语句中获取单个ID到第二条具有“ product_id”外键的语句的相应记录中。
我将如何构造该语句以使其起作用?我对其他解决方案持开放态度,这些解决方案提供了更有效的方法来实现相同的结果。
以下是您要做什么的合理解释:
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;
基本答案是“使用returning *并使用ajoin来获取值”。我需要更改标题以使其唯一。
returning *
join