将 postgres 函数与查询结合起来

2024-02-28

我目前正在努力处理结果集中需要的 sql 函数的输出:

SELECT getAdditionalInfoAboutDate(date) from sampleCalendar

问题是,我通过以下方式得到结果:

  1. “属性1、属性2、属性3”
  2. “属性2、属性3、属性4”
  3. ...

正如您所看到的,我得到了我想要的结果,但它只有一列,即使我的函数返回 3 列。

当我尝试创建如下语句时:

SELECT (Select * from getAdditionalInfoAboutDate(date)) from sampleCalendar

我收到异常“子查询必须仅返回一列”。

我有机会以某种方式解决这个问题吗?

编辑:找到答案HERE https://stackoverflow.com/questions/11472790/analogue-to-cross-apply这是:

SELECT getAdditionalInfoAboutDate(date).* from sampleCalendar

I wrote 你找到的答案 https://stackoverflow.com/questions/11472790/analogue-to-cross-apply,但可能有一个更好的答案,具体取决于您的函数实际返回的内容:一行或多行?假设one row.

你的问题是不正确无论哪种方式。行表达式必须用括号括起来才能分解,否则语法不明确。一定是:

SELECT (getAdditionalInfoAboutDate(date)).* FROM sampleCalendar;

然而,Postgres 在这方面有一个弱点。它将多次评估该函数 - 对结果中的每一列评估一次。到优化性能将函数调用放在子查询中:

SELECT (f_row).*
FROM  (
   SELECT getAdditionalInfoAboutDate(date) AS f_row
   FROM   sampleCalendar
   ) sub;

或者使用一个LEFT JOIN LATERAL在第 9.3 页+

SELECT f_row.*  -- no parentheses here, it's a table alias
FROM   sampleCalendar s
LEFT   JOIN LATERAL getAdditionalInfoAboutDate(s.date) f_row ON true

更多细节:

  • 从函数返回的记录具有串联的列 https://stackoverflow.com/questions/25392371/record-returned-from-function-in-query-has-columns-concatenated-in-postgresql/25392910#25392910
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 postgres 函数与查询结合起来 的相关文章

随机推荐