我有一个表值PL / pgsql函数,它将1个输入作为整数,一个ID。返回的表具有固定列(例如5)但行数不同。
这些唯一ID有一个大表。我想将此功能应用于每个ID和UNION ALL结果。
在线查看我一直看到CROSS APPLY作为解决方案,但它似乎在PostgreSQL中不可用。我怎么能这样做"申请"操作?
一个简单的解决方案是使用额外的外部循环重写表值函数。但有没有办法直接在SQL中执行此操作?
答案 0 :(得分:2)
我认为在当前版本的PostgreSQL(9.2)中做不到。在9.3中,LATERAL join会完全符合您的要求。
但是,您可以apply
函数返回一组简单值:
select id, func(id) as f from tbl1
答案 1 :(得分:1)
create table t (id int);
insert into t (id) select generate_series(1, 10);
create or replace function f (i integer)
returns table(id_2 integer, id_3 integer) as $$
select id * 2 as id_2, id * 3 as id_3
from t
where id between i - 1 and i + 1
$$ language sql;
select id, (f(id)).*
from t;