我有一个名为“getList(date)”的函数。此函数从参数中输入的日期返回一个项目列表(有几列)。
如果我打电话:
SELECT * FROM getList('12/31/2014');
工作正常。它返回一个包含日期,项目名称和价格的列表。
这样的事情:
date item_description price
-----------------------------------------------
12/31/2014 banana 1
12/31/2014 apple 2.5
12/31/2014 coconut 3
但我有另一张表格,上面有我要搜索的日期。
所以,我想从该表中选择所有日期,对于返回的每一行,我想调用我的函数“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
我不知道该怎么做。当然,我的数据不是水果清单。这只是为了解释整件事情。
非常感谢。
答案 0 :(得分:16)
LATERAL
加入正确的方法是使用横向查询(PostgreSQL 9.3或更高版本):
SELECT d."date", f.item_description, f.price
FROM mydates d,
LATERAL getList(d."date") f;
请参阅the manual。
SELECT
在旧版本中,您必须使用PostgreSQL扩展,其中包含一些... quirky ...属性,支持SELECT
- 列表中的set-returns函数。 除非您知道必须支持PostgreSQL 9.2或更早版本,否则不要使用它。
SELECT d."date", (getList(d."date").*
FROM mydates d;
这可能会导致对getList
函数进行多次评估,每次输出一列。