在单个查询中INSERT到2个表postgresql中

时间:2015-04-10 14:36:14

标签: sql database postgresql

我有这3张桌子。

Employee
PK : id
name

completedBy
FK : employee_id
FK : order_id

Order
PK : id
date

我创建了用于创建订单的表单,其中我填写了订单的信息(日期)和完成订单的人。在我的表格中有一张桌子,我从中选择员工并获得他的身份证。我想知道是否有可能通过一个查询插入表Order和completedBy。

使用两个插件或使用答案中的代码之间的有效性是否存在差异?

1 个答案:

答案 0 :(得分:9)

这可以使用修改公用表表达式的数据来完成:

with new_order as (
  insert into orders (id, date) values (1, current_date)
  returning id
)
insert into completedby (employee_id, order_id)
values 
( 42 -- employee_id, 
  (select id from new_order)
);

第一部分插入orders表并返回插入的ID。然后,第二部分使用已知的employee_id将行插入completedby表,并从上一步中检索order_id。

修改

如果id表中的orders列是serial列,并且您希望让序列生成值,那么您也可以这样做:

with new_order as (
  insert into orders (date) values (current_date)
  returning id
)
insert into completedby (employee_id, order_id)
values 
( 42 -- employee_id, 
  (select id from new_order)
);