簡體   English   中英

將postgres函數與查詢結合

[英]Combine postgres function with query

目前,我在結果集中需要使用sql函數的輸出:

SELECT getAdditionalInfoAboutDate(date) from sampleCalendar

問題是,我通過以下方式得到結果:

  1. “屬性1,屬性2,屬性3”
  2. “屬性2,屬性3,屬性4”
  3. ...

如您所見,我得到了我想要的結果,但是即使我的函數返回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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM