获取插入值以更新for循环内另一个表的列

时间:2015-11-22 21:57:24

标签: c# postgresql

我基本上试图在假装表格是某些列表的帖子中实现与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;
}

基本上,我正在添加一个新的“父”表,我需要在迁移中运行一些代码,这样每个现有的“子”都有一个父代。我的postgres技能有限,所以我不知道从哪里开始。

这是我到目前为止所拥有的

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$;

1 个答案:

答案 0 :(得分:0)

除非我错过了这艘船,否则我认为这就是你所追求的:

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是一个序列,默认为序列或者有其他一些自动填充机制,我认为这是你想要的。