获取插入的值以更新for循环中另一个表的列
本文关键字:另一个 循环 更新 插入 获取 for | 更新日期: 2023-09-27 18:24:01
我基本上是想在postgres中实现与这个c#
等效的东西,假装表是一些列表
List<Comment> comments;
List<Post> posts;
//SELECT
foreach (var comment in comments.OrderBy(c => c.id))
{
//INSERT
var post = new Post(title: comment.title);
posts.Add(post);
//UPDATE
comment.postId = post.id;
}
基本上,我添加了一个新的"父"表,并且我需要在迁移中运行一些代码,这样每个现有的"子"都有一个父表。我的后期技能有限,所以我不知道从哪里开始。
这是我迄今为止拥有的
DO
$do$
BEGIN
FOR comment IN
SELECT * FROM comments ORDER BY id
LOOP
INSERT INTO posts (title)
VALUES (comment.title);
-- how do I update???
END LOOP;
END
$do$;
除非我错过了船,否则我想这就是你想要的:
DO
$$
DECLARE
komment comments;
pid bigint;
BEGIN
FOR komment IN
SELECT * FROM comments ORDER BY id
LOOP
INSERT INTO posts (title)
VALUES (komment.title)
returning id into pid;
update comments
set post_id = pid
where id = komment.id;
END LOOP;
END
$$;
这假设posts.id
是一个序列,默认为一个序列或具有其他自动填充机制,我认为这就是您想要的。