我目前在我的结果集中需要输出sql-function的输出:
SELECT getAdditionalInfoAboutDate(date) from sampleCalendar
问题是,我以下列方式得到结果:
正如你所看到的,我得到了我想要的结果,但它只有一列,即使我的函数返回3列。
当我尝试创建如下语句时:
SELECT (Select * from getAdditionalInfoAboutDate(date)) from sampleCalendar
我得到异常"子查询必须只返回一列"。
我有机会以某种方式解决这个问题吗?
编辑:找到答案HERE,即:
SELECT getAdditionalInfoAboutDate(date).* from sampleCalendar
答案 0 :(得分:1)
即使the answer you found来自我,也可能有更好的答案,具体取决于您的函数实际返回的内容:一行还是多行?假设one
行。
无论哪种方式,您的问题都是不正确。 行类型必须括在括号中才能将其分解,否则语法可能不明确。必须是:
SELECT (getAdditionalInfoAboutDate(date)).* FROM sampleCalendar;
然而,Postgres在这里有一个弱点。它会多次评估函数 - 对于结果中的每一列一次。要优化性能,请将函数调用放在子查询中:
SELECT (f_row).*
FROM (SELECT getAdditionalInfoAboutDate(date) AS f_row FROM sampleCalendar) sub;
或者在pg 9.3 +
中使用LEFT JOIN LATERAL
SELECT f_row.* -- no parentheses here, it's a table alias
FROM sampleCalendar s
LEFT JOIN LATERAL getAdditionalInfoAboutDate(s.date) f_row ON TRUE
更多详情: