【发布时间】:2020-05-25 01:47:18
【问题描述】:
在 Postgresql (11) 中,我有一个表 pre_data,其中包含 3 个字段:id_b、data_a 和 data_b。
我想将此表中的INSERT 语句执行到另外两个a (id_a, data_a) 和b (id_b, id_a, data_b) 中,其中b.id_a 有一个引用a.id_a 的外键约束。两个表都应填充来自pre_data 的数据。因此需要先填充表a,否则将没有可用于表b 的键id_a。
如果这样的查询是可能的,那就太好了:
WITH first AS (
INSERT INTO a (id_a, data_a)
SELECT t.data_a FROM pre_data t
RETURNING id_a, t.id_b, t.data_b
)
INSERT INTO b (id_a, id_b, data_b)
SELECT id_a, id_b, data_b FROM first
但我知道它不会起作用,因为RETURNING 语句只能引用正在插入的表中的列 (a)。
如果我执行两个单独的查询,我无法将插入到 a 中的数据与原始 pre_data 连接回来(data_a 和 data_b 不是唯一字段)。
我希望有一种方法可以在没有临时表的情况下做到这一点,因为实际的表非常大。
【问题讨论】:
-
您的示例没有说服力,因为您没有将
a中的任何列插入b。您可以直接从pre_data进行第二次插入。 -
你是对的,我错过了插入中的一列。我会更新问题
标签: sql postgresql