[英]Combine postgres function with query
目前,我在結果集中需要使用sql函數的輸出:
SELECT getAdditionalInfoAboutDate(date) from sampleCalendar
問題是,我通過以下方式得到結果:
如您所見,我得到了我想要的結果,但是即使我的函數返回3列,它也只有一列。
當我嘗試創建如下語句時:
SELECT (Select * from getAdditionalInfoAboutDate(date)) from sampleCalendar
我收到異常“子查詢必須僅返回一列”。
我有機會以某種方式解決這個問題嗎?
編輯:找到答案在這里是:
SELECT getAdditionalInfoAboutDate(date).* from sampleCalendar
即使您找到的答案是我的,但根據函數實際返回的內容,可能會有更好的答案:一行還是多行? 假設one
排。
無論哪種方式,您所遇到的問題都是不正確的 。 行類型必須用括號括起來才能分解 ,否則語法可能會模棱兩可。 一定是:
SELECT (getAdditionalInfoAboutDate(date)).* FROM sampleCalendar;
但是,Postgres在這里有薄弱環節。 它將多次評估函數-結果中的每一列一次。 要優化性能,請將函數調用放在子查詢中:
SELECT (f_row).*
FROM (SELECT getAdditionalInfoAboutDate(date) AS f_row FROM sampleCalendar) sub;
或者在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
更多細節:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.