【发布时间】:2021-07-25 10:50:51
【问题描述】:
我是 PostgreSQL(甚至是 Stackoverflow)的新手。
说,我有两张桌子Order和Delivery:
Order
id product address delivery_id
--------------------------------------------------
1 apple mac street (null)
3 coffee java island (null)
4 window micro street (null)
Delivery
id address
----------------
Delivery.id 和 Order.id 是自动递增的串行列。Delivery 表当前为空。
我想将Order.address 移动到Delivery.address 并将其Delivery.id 移动到Order.delivery_id 以达到这种状态:
Order
id product address delivery_id
--------------------------------------------------
1 apple mac street 1
5 coffee java island 2
7 window micro street 3
Delivery
id address
---------------------
1 mac street
2 java island
3 micro street
然后我将删除Order.address。
我发现了一个关于 Oracle 的类似问题,但未能将其转换为 PostgreSQL:
我仍然认为应该可以在 Postgres 中使用带有 RETURNING 子句和以下 INSERT 的普通 SQL 语句。
我试过这个(以及一些变体):
WITH ids AS (
INSERT INTO Delivery (address)
SELECT address
FROM Order
RETURNING Delivery.id AS d_id, Order.id AS o_id
)
UPDATE Order
SET Delivery_id = d_id
FROM ids
WHERE Order.id = ids.o_id;
最近一次尝试失败:
错误:表“Delivery”第 1 行缺少 FROM 子句条目:...address Order RETURNING Delivery.id...
如何正确地做到这一点?
【问题讨论】:
标签: sql postgresql common-table-expression sql-returning