为 select 中的每一行调用一个函数 - Postgres
Call a function for each row in select - Postgres
我有一个名为 "getList(date)" 的函数。这个函数 returns 我从参数中输入的日期开始的项目列表(有几列)。
如果我打电话:
SELECT * FROM getList('12/31/2014');
它工作正常。它 returns 给我一个包含日期、项目名称和价格的列表。
像这样:
date item_description price
-----------------------------------------------
12/31/2014 banana 1
12/31/2014 apple 2.5
12/31/2014 coconut 3
但我还有另一个 table,其中包含我要搜索的日期。
所以,我想 select 来自 table 的所有日期,并且对于返回的每一行,我想调用我的函数 "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
我不知道具体怎么做。当然我的数据不是水果单。这只是为了更容易解释整个事情。
非常感谢。
正确的方式 - LATERAL
加入
执行此操作的正确方法是使用横向查询(PostgreSQL 9.3 或更新版本):
SELECT d."date", f.item_description, f.price
FROM mydates d,
LATERAL getList(d."date") f;
传统方式 - SELECT
中的 SRF
在旧版本中,您必须使用具有一些...古怪...属性的 PostgreSQL 扩展,支持 SELECT
-列表中的集合返回函数。 除非您知道必须支持 PostgreSQL 9.2 或更早版本,否则不要使用它。
SELECT d."date", (getList(d."date").*
FROM mydates d;
这可能会导致对 getList
函数进行多次计算,对输出的每一列计算一次。
我有一个名为 "getList(date)" 的函数。这个函数 returns 我从参数中输入的日期开始的项目列表(有几列)。
如果我打电话:
SELECT * FROM getList('12/31/2014');
它工作正常。它 returns 给我一个包含日期、项目名称和价格的列表。
像这样:
date item_description price
-----------------------------------------------
12/31/2014 banana 1
12/31/2014 apple 2.5
12/31/2014 coconut 3
但我还有另一个 table,其中包含我要搜索的日期。
所以,我想 select 来自 table 的所有日期,并且对于返回的每一行,我想调用我的函数 "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
我不知道具体怎么做。当然我的数据不是水果单。这只是为了更容易解释整个事情。
非常感谢。
正确的方式 - LATERAL
加入
执行此操作的正确方法是使用横向查询(PostgreSQL 9.3 或更新版本):
SELECT d."date", f.item_description, f.price
FROM mydates d,
LATERAL getList(d."date") f;
传统方式 - SELECT
中的 SRF
在旧版本中,您必须使用具有一些...古怪...属性的 PostgreSQL 扩展,支持 SELECT
-列表中的集合返回函数。 除非您知道必须支持 PostgreSQL 9.2 或更早版本,否则不要使用它。
SELECT d."date", (getList(d."date").*
FROM mydates d;
这可能会导致对 getList
函数进行多次计算,对输出的每一列计算一次。