本质上,我想做的是:
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
那么,如何获取结果集,同时为返回集的函数提供参数?
最佳答案
我正在寻找的语法是:
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;
一些返回集合的函数具有标量而不是复合返回类型。在这些情况下,(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)
关于postgresql - 在同一查询中使用列参数化设置返回函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7337723/