为select - Postgres中的每一行调用一个函数

Gil*_*ert 12 postgresql function postgresql-9.2

我有一个名为"getList(date)"的函数.此函数从参数中输入的日期返回一个项目列表(包含多列).

如果我打电话:

SELECT * FROM getList('12/31/2014');
Run Code Online (Sandbox Code Playgroud)

它工作正常.它返回一个包含日期,项目名称和价格的列表.

像这样的东西:

date        item_description    price
-----------------------------------------------
12/31/2014      banana          1
12/31/2014      apple           2.5
12/31/2014      coconut         3
Run Code Online (Sandbox Code Playgroud)

但我有另一张表格,其中包含我想要搜索的日期.

所以,我想从该表中选择所有日期,并且对于返回的每一行,我想调用我的函数"getList"来得到如下结果:

 date       item_description    price
 -----------------------------------------------
 12/28/2014     banana          0.5
 12/28/2014     apple           1.5
 12/28/2014     coconut         2
 12/31/2014     banana          1
 12/31/2014     apple           2.5
 12/31/2014     coconut         3
Run Code Online (Sandbox Code Playgroud)

我不知道该怎么做.当然,我的数据不是水果清单.这只是为了解释整个事情更容易.

非常感谢你.

Cra*_*ger 18

正确的方式 - LATERAL加入

执行此操作的正确方法是使用横向查询(PostgreSQL 9.3或更高版本):

SELECT d."date", f.item_description, f.price
FROM mydates d,
     LATERAL getList(d."date") f;
Run Code Online (Sandbox Code Playgroud)

请参阅手册.

遗产方式 - SRF in SELECT

在旧版本中,您必须使用PostgreSQL扩展,其中包含一些... quirky ...属性,支持SELECT-list 中的set-returns函数.除非您知道必须支持PostgreSQL 9.2或更早版本,否则不要使用它.

SELECT d."date", (getList(d."date").*
FROM mydates d;
Run Code Online (Sandbox Code Playgroud)

这可能导致对getList函数的多次评估,对于输出的每列一次.