PostgreSQL:系统地将表值函数应用于一组值和UNION ALL结果

时间:2013-08-21 15:22:30

标签: sql database postgresql

我有一个表值PL / pgsql函数,它将1个输入作为整数,一个ID。返回的表具有固定列(例如5)但行数不同。

这些唯一ID有一个大表。我想将此功能应用于每个ID和UNION ALL结果。

在线查看我一直看到CROSS APPLY作为解决方案,但它似乎在PostgreSQL中不可用。我怎么能这样做"申请"操作?

一个简单的解决方案是使用额外的外部循环重写表值函数。但有没有办法直接在SQL中执行此操作?

2 个答案:

答案 0 :(得分:2)

我认为在当前版本的PostgreSQL(9.2)中做不到。在9.3中,LATERAL join会完全符合您的要求。

但是,您可以apply函数返回一组简单值:

select id, func(id) as f from tbl1

sql fiddle demo

答案 1 :(得分:1)

SQL Fiddle

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;