我有一个订单、收件人和项目表。
我想根据上一个查询的响应将数据插入到每个表中。
insert into recipient(name, address) values(name, address);
insert into orders(recipient_id, total_price, total_quantity) values(recipient_id, 2000, 20);
insert into items(order_id, item, price, quantity, total) values(order_id, item1, 230, 2, 260);
insert into items(order_id, item, price, quantity, total) values(order_id, item2, 500, 2, 1000);
Run Code Online (Sandbox Code Playgroud)
我想在单个 PostgreSQL 查询中执行此操作。
这是我尝试过的
insert into users (fullname, email, phone, address, status)
values ('Mine Essien', 'davidessienshare@gmail.com', '08167462431', 'Andela Epic tower Lagos')
returning id as recipient_id
)
new_order AS(
insert into orders(user_id, recipient_id, quantity, total_cost)
values(1, recipient_id, 5, 9500)
returning id as order_id
)
new_item as (insert into items(order_id, item, quantity, price, total) values(order_id, 'Pepper soup', 2, 2500, 5000), values(order_id, 'Ishiewu', 1, 5000, 5000), values(order_id, 'Fried yam', 2, 2000, 4000);
Run Code Online (Sandbox Code Playgroud)
似乎您的表是用serial
oridentity
列定义的,并且您希望使用从一次插入中生成的值作为下一条语句中的外键。这确实可以使用数据修改 CTE结合returning
子句来完成:
with new_recipient as (
insert into recipient
(name, address)
values
(name, address)
returning recipient_id
), new_order as (
insert into orders
(recipient_id, total_price, total_quantity)
values
((select * from new_recipient), 2000, 20)
returning order_id
)
insert into items
(order_id, item, price, quantity, total)
values
((select * from new_order), 'item1', 230, 2, 260),
((select * from new_order) , 'item2', 500, 2, 1000);
Run Code Online (Sandbox Code Playgroud)
然而,这也可以使用三个不同的插入语句来完成:
into recipient
(name, address)
values
(name, address);
insert into orders
(recipient_id, total_price, total_quantity)
values
(lastval(), 2000, 20);
insert into items
(order_id, item, price, quantity, total)
values
(lastval(), 'item1', 230, 2, 260),
(lastval(), 'item2', 500, 2, 1000);
Run Code Online (Sandbox Code Playgroud)
该函数lastval()
返回最近生成的序列号。因此,在第二个插入中,这将是and in the third statement it would be the
receiver_id order_id`。
归档时间: |
|
查看次数: |
4788 次 |
最近记录: |