首頁 > 資料庫 > mysql教程 > 如何在 PostgreSQL 中有效率地多次呼叫帶有數組參數的集合返回函數?

如何在 PostgreSQL 中有效率地多次呼叫帶有數組參數的集合返回函數?

Linda Hamilton
發布: 2024-12-26 12:32:10
原創
890 人瀏覽過

How Can I Efficiently Call a Set-Returning Function with an Array Argument Multiple Times in PostgreSQL?

多次調用帶有數組參數的集合返回函數

此討論圍繞一個名為foo 的集合返回函數進行,該函數可以處理利用特定參數的資料數組,並提供包含一組行和附加列的結果。雖然該函數在單一資料集上成功運行,但在嘗試處理多個資料集而不依賴資料 ID 進行引用時,它遇到了挑戰。

修改語法的各種嘗試,例如使用以下格式:

SELECT dataid, (foo(ARRAY_AGG(data)),1).*
FROM dataset
WHERE dataid = something -- only testing on 1
GROUP BY dataid
登入後複製

都沒有成功,導致每個函數都重複呼叫

解決方案:橫向連接

在PostgreSQL 9.3 及更高版本中,使用LEFT JOIN LATERAL 建構通常會產生最佳結果:

SELECT sub.dataid, f.*
FROM (
   SELECT dataid, array_agg(data) AS arr
   FROM dataset
   WHERE dataid = something
   GROUP BY 1
   ) sub
LEFT JOIN LATERAL foo(sub.arr) f ON true;
登入後複製

此語法確保保留連接左側的所有行,即使如果函數 foo 沒有傳回任何行。

如果foo 確實不能傳回任何行並且需要排除這些行,則可以使用以下語法:

CROSS JOIN LATERAL foo(sub.arr)
登入後複製

或其簡寫版本:

, foo(sub.arr)
登入後複製

這種方法記錄在PostgreSQL 手冊中。

以上是如何在 PostgreSQL 中有效率地多次呼叫帶有數組參數的集合返回函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板