基本上,我想做的是:
SELECT set_returning_func(id) FROM my_table;
但是,结果将是记录语法中的单个列,例如
set_returning_func
---------------------------------------------
(old,17,"August 2, 2011 at 02:54:59 PM")
(old,28,"August 4, 2011 at 08:03:12 AM")
(2 rows)
我希望将它解压缩到列中。如果我这样写这样的查询:
SELECT srf.* FROM my_table, set_returning_func(my_table.id);
我收到错误消息:
ERROR: function expression in FROM cannot refer to other relations of same query level
那么,如何获得结果集,同时还提供带参数的set-returns函数?
答案 0 :(得分:6)
我正在寻找的语法是:
SELECT (set_returning_func(id)).* FROM my_table;
set_returning_func(id)
是复合类型。就像*
语法可用于表格一样:
SELECT my_table.* FROM my_table, my_other_table
它也可以用于复合值(尽管它们必须用括号括起来)。直觉上,还可以从复合返回函数中选择单个列:
SELECT (set_returning_func(id)).time FROM my_table;
某些set-returns函数具有标量而非复合返回类型。在这些情况下,(expr).*
语法没有意义,并产生错误:
> SELECT (generate_series(1,5)).*;
ERROR: type integer is not composite
正确的语法很简单:
> SELECT generate_series(1,5);
generate_series
-----------------
1
2
3
4
5
(5 rows)