我想在postgresql的for循环中执行多个查询。
例如
FOR rec IN select * from student LOOP
END LOOP;
在上面的示例中,select * from student只有一个查询,我有多个查询要循环。我想为多个查询使用相同的循环而不是多个循环。
答案 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}},然后交叉加入您的查询 或嵌套循环;同样的效果,只是更贵。