首頁 >資料庫 >mysql教程 >為什麼我的函數傳回的列在我的 PostgreSQL 查詢中串聯?

為什麼我的函數傳回的列在我的 PostgreSQL 查詢中串聯?

Susan Sarandon
Susan Sarandon原創
2024-12-26 13:27:11693瀏覽

Why Are My Function's Returned Columns Concatenated in My PostgreSQL Query?

從函數傳回的記錄顯示串聯列:揭示原因

在查詢中,連接表並從函數檢索歷史數據,用戶可能會遇到從函數傳回的列連接成單一字串的問題。當直接在主查詢中使用該函數時,會出現此異常。

了解問題

當查詢傳回多列的函數時,例如:

account_servicetier_for_day(acct.accountid, '2014-08-12')

它傳回包含所要求資料的記錄。但是,當此記錄嵌入到另一個查詢時,PostgreSQL 會將其解釋為單一連接字串。

分解函數輸出

要解決此問題,使用者應擷取單一字串函數記錄中的欄位。在PostgreSQL 9.3 及更高版本中,這可以使用JOIN LATERAL 語法來實現,該語法允許將函數無縫整合到FROM 子句中:

JOIN LATERAL account_servicetier_for_day(a.accountid, '2014-08-12') f ON TRUE

ON TRUE 子句確保左側的所有行無論傳回的行數為何,表都會與函數的結果連接。

在 PostgreSQL 9.2 及更早版本中,擷取列資料需要明確子查詢:

(SELECT *, account_servicetier_for_day(a.accountid, '2014-08-12') AS rec
   FROM account_tab a) AS a

這裡,子查詢將函式呼叫的結果指派給名為rec的記錄。然後,外部查詢可以引用記錄的列,例如 a.rec.timestamp。

避免 Not In (子查詢)

最後,建議避免使用NOT IN(子查詢)進行集合排除。相反,喜歡 NOT EXISTS 子句,它更有效率且不易出現效能問題。

以上是為什麼我的函數傳回的列在我的 PostgreSQL 查詢中串聯?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn