首頁 > 資料庫 > mysql教程 > 多個集合回傳函數在不同版本的 PostgreSQL SELECT 子句中的行為如何?

多個集合回傳函數在不同版本的 PostgreSQL SELECT 子句中的行為如何?

Patricia Arquette
發布: 2025-01-17 23:42:09
原創
874 人瀏覽過

How Do Multiple Set-Returning Functions Behave in PostgreSQL's SELECT Clause Across Different Versions?

PostgreSQL 對 SELECT 語句中多個集合回傳函數的處理:特定於版本的分析

SELECT 語句中遇到多個傳回集合的函數時,PostgreSQL 的行為會根據資料庫版本的差異而有很大差異。

PostgreSQL 10 及更高版本:

在版本 10 及更高版本中,這些函數會同步執行。 輸出的結構使得產生最多行的函數決定結果集中的總行數。 較短的函數輸出以 NULL 值填充以保持這種對齊,從而有效地創建類似交叉連接的結果。

PostgreSQL 9.6 及更早版本:

在 9.6 版本之前,結果有很大不同。產生的總行數等於每個集合傳回函數的行計數的最小公倍數 (LCM)。 這可能會導致不可預測且可能不理想的結果,特別是當行數沒有共同因素時。

範例:

讓我們檢查一下查詢:

<code class="language-sql">SELECT generate_series(1, 3), generate_series(5, 7);</code>
登入後複製

PostgreSQL 10 輸出:

<code> generate_series | generate_series 
-----------------+-----------------
               1 |               5
               2 |               6
               3 |               7
               NULL |               NULL
               NULL |               NULL
               NULL |               NULL</code>
登入後複製

PostgreSQL 9.6-輸出:

<code> generate_series | generate_series 
-----------------+-----------------
               1 |               5
               2 |               6
               3 |               7
               1 |               5
               2 |               6
               3 |               7
               1 |               5
               2 |               6
               3 |               7</code>
登入後複製

主要考慮因素:

  • PostgreSQL 10 及更高版本禁止在 CASECOALESCE 表達式內使用傳回集合的函數。
  • 為了改善控制和可預測的結果,強烈建議使用 LATERAL JOINROWS FROM (...),而不是直接在 SELECT 清單中包含多個設定回傳函數。

相關文件:

以上是多個集合回傳函數在不同版本的 PostgreSQL SELECT 子句中的行為如何?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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