PostgreSQL SELECT 子句:多個集合回傳函數的行為
PostgreSQL SELECT
子句中多個集合回傳函數 (SRF) 的交互作用與版本相關。 理解這種行為對於可預測的查詢結果至關重要。
PostgreSQL 10 及更高版本:
在 PostgreSQL 10 及後續版本中,SRF 在 清單中 標量表達式之前進行處理。 這在功能上等同於在 SELECT
子句中使用它們。系統迭代地產生輸出行:首先使用每個 SRF 的初始結果,然後使用每個 SRF 的第二個結果,依此類推。 LATERAL FROM
值填充,以符合最長結果集的長度。這可確保所有輸出行具有相同的列數。 NULL
PostgreSQL 9.6 及更早版本:
舊版(9.6 及以下)表現出不同的行為。輸出行總數成為每個 SRF 產生的行計數的最小公倍數 (LCM)。 這可能會導致意外和潛在不可預測的結果,特別是當 SRF 結果集大小不共享公約數時。
最佳實務:
為了避免歧義並確保跨 PostgreSQL 版本的結果一致,強烈建議避免直接在 清單中使用多個 SRF,尤其是在較舊的 PostgreSQL 版本中。 SELECT
連接提供了一種更清晰、更可預測且跨版本相容的方法來處理多個 SRF。 LATERAL
進一步閱讀:
以上是多個集合回傳函數在 PostgreSQL SELECT 子句中的行為如何?的詳細內容。更多資訊請關注PHP中文網其他相關文章!