在这样的数据库中:
create table a (
id serial primary key,
data integer not null
);
create table b (
id serial primary key,
data integer not null
);
create table link (
a_id integer unique not null references a(id),
b_id integer unique not null references b(id)
);
insert into a (data) values (1),(1),(1),(2),(2),(3);
我想将link
中的每一行a
到b
中新创建的包含相同数据的行。
也就是说,我想为表b
中的每一行创建表a
中的一行,并包含相同的data
,并且我想在表中创建一行link
以数据始终匹配的一对一方式将表a
中的行链接到表b
。
有没有办法在单个查询中做到这一点?
有没有一种方法可以在不删除link
表的not null约束的情况下?
我希望我能做到:
with bs as (
insert into b (data)
select data
from a
returning a.id as a_id, b.id as b_id
)
insert into link (a_id, b_id)
select bs
但是,postgres不允许我返回未插入的字段。