如何在for循环中执行多个查询

Posted

技术标签:

【中文标题】如何在for循环中执行多个查询【英文标题】:How to execute multiple queries in for loop 【发布时间】:2013-12-06 05:08:45 【问题描述】:

我想在 postgresql 的 for 循环中执行多个查询。

例如

FOR rec IN select * from student LOOP

END LOOP;

在上面的示例中 select * from student 只是一个查询,我有多个要循环的查询。我想对多个查询使用同一个循环而不是多个循环。

【问题讨论】:

【参考方案1】:

各种查询如何相互关联?

(1) 根据各自的排序顺序将每个中的第一个、第二个等组合起来。

您可以将每个查询放在带有 row_number() 的子查询中,然后将它们全部链接到 row_number 并在所有查询中运行一个循环...

FOR rec IN
  SELECT *
  FROM  (
     SELECT *, row_number() OVER (ORDER BY student_id) AS rn
     FROM   student
     ) s
  FULL JOIN  (
     SELECT *, row_number() OVER (ORDER BY foo_id) AS rn
     FROM   foo
     ) t USING (rn)
  -- etc.
LOOP
  -- do stuff
END LOOP;

如果行数可能不匹配并且您不想丢失任何行数,请使用 FULL [ OUTER ] JOIN

或者您可以遍历 一个 查询(最好是行数最多的查询)并打开 a cursor 以供其他查询。然后你可以FETCH [NEXT] 在循环的每次迭代中随心所欲地使用任意数量的游标。

(2) 交叉连接 - 将每一行与下一个查询中的每一行结合起来。

不太可能,因为它会很快为多个查询生成大量组合。无论哪种方式,请从上面删除 row_number(),然后交叉加入您的查询。 或者嵌套循环;同样的效果,只是更贵。

【讨论】:

谢谢。但是在我的情况下,我有一个表,其中几乎没有重复项。我已经使用 select 子句识别了它们。现在我想删除它们,保留单个记录(删除重复项)。我不想访问多个表。

以上是关于如何在for循环中执行多个查询的主要内容,如果未能解决你的问题,请参考以下文章

Promise循环执行多个请求

如何使用for循环或条件在pandas数据框的子集中创建多个回归模型(statsmodel)?

如何在我的 for 循环之外执行代码(需要等到循环完成从 Firebase 数据库中检索数据)?

为啥这个for循环不执行?

如何在 Python 中创建多个 for 循环列表的递归以获得组合? [复制]

如何在 C 中的 for (;;) 循环中声明多个变量?