如何在一个表中返回多个查询(已循环)的结果?

时间:2011-05-16 02:22:19

标签: postgresql plpgsql

在plpgsql中,我想使用查询A的结果来执行多个查询(查询B),并将所有B查询的结果作为一个表返回,但我不知道如何执行此操作。我是否在plpgsql中使用“RETURN QUERY”功能?

这是一个例子。该函数查找具有给定代码的所有zip_code记录,然后在所有位置搜索该原始zip_code的状态。 (我知道当前查询可以通过连接完成,但我的ACTUAL查询需要此功能。)

begin;
create OR REPLACE function t() returns setof locations as
$$
declare z zip_codes%rowtype;
begin
  for z in select * from zip_codes where code like '%32301%'
  LOOP
    return query select * from locations where locations.state like z.state; #query B 
        # All I want to do is return the results from all of the above queries as one
        # result set.
  END LOOP;
  return;
end
$$
language 'plpgsql';
commit;

知道我是怎么做到的吗?

2 个答案:

答案 0 :(得分:2)

您可以创建一个临时表,用每个循环的结果填充它,最后返回临时表的内容。

select * into temporary resulttbl from locations where 1 = 2
...
loop
    insert into resulttbl select ...
end loop
...
return query select * from resulttbl

修改

或者您可以在问题中使用您的代码段。它应该工作(就像你在评论中说的,文档说它可以做到这一点)。你有错吗?

答案 1 :(得分:0)

考虑直接使用单个语句返回行:

return query
select locations.*
from locations
join zip_codes on zip_codes.state = locations.state
where zip_codes like '%32301%';