我有这3张桌子。
Employee
PK : id
name
completedBy
FK : employee_id
FK : order_id
Order
PK : id
date
我创建了用于创建订单的表单,其中我填写了订单的信息(日期)和完成订单的人。在我的表格中有一张桌子,我从中选择员工并获得他的身份证。我想知道是否有可能通过一个查询插入表Order和completedBy。
使用两个插件或使用答案中的代码之间的有效性是否存在差异?
答案 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)
);