我的表格x包含许多现有行
x ( id, name)
我有一个新表y,当前为空,(所有字段都有默认值)
y ( id, uuid )
我用新列y_id
更新了x x ( id, name, y_id )
我想为x中的每一行填充y,然后通过y.id
将x与y相关联这和我的一样接近,但这会将x的所有行设置为具有相同的y.id。
with ys as (
insert into y(uuid) values(default)
returning id
)
update x set y_id = ys.id
from ys
答案 0 :(得分:2)
您希望为“x”的每个值填充“y”。但是你没有办法连接表格。但是。 。
with ys as (
insert into y
select -- this is empty on purpose to put in only default values
from x;
returning id
)
update x
set y_id = yy.id
from (select x.*, row_number() over (order by x_id) as seqnum
from x
) xx join
(select ys.*, row_number() over (order by y_id) as seqnum
from ys
) yy
on xx.seqnum = yy.seqnum
where x.x_id = xx.x_id;
这是做什么的? CTE在y
中插入一行,其中x
中的每一行都有默认值。 insert
然后将序列号添加到x和y,以便它们可以对齐,一行到一行。然后将该值用于更新。