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

时间:2013-12-06 05:08:45

标签: sql postgresql for-loop plpgsql

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

例如

FOR rec IN select * from student LOOP

END LOOP;

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

1 个答案:

答案 0 :(得分:1)

各种查询如何相互关联?

(1)根据各自的排序顺序合并每个的第1个,第2个等。

您可以将每个查询放在一个带有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]随意使用row_number()

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

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

相关问题