我有一个这样的函数,它总是只返回一条记录:
CREATE FUNCTION foo(pid int) RETURNS TABLE (a int, b int)
AS $$
-- …
$$ LANGUAGE sql;
我想从表中选择这样的行:
SELECT p.id
, foo(p.id).*
FROM puns AS p;
但是,这会在.*
处出现语法错误。我无法弄清楚如何使用JOIN
,因为p.id
是函数的参数。
如何将函数返回的记录解压缩到select查询中?期望的结果将包含三列id
,a
和b
。
我正在使用PostgreSQL 9.2。
答案 0 :(得分:2)
选项1 - 升级到postgres 9.3并使用LATERAL
。
选项2 - 使用类似:
SELECT sub_q.id, (sub_q.foo_row).a, (sub_q.foo_row).b
FROM (
SELECT p.id
, foo(p.id) as foo_row
FROM puns AS p ) sub_q;
选项3 - 尝试其他括号,如:
SELECT p.id
, (foo(p.id)).*
FROM puns AS p;
但我没有测试选项3。