PostgreSQL 中 LATERAL JOIN 與子查詢的比較:何時使用哪一個?
背景
PostgreSQL 中 LATERAL JOIN 的出現,為解決涉及低效子查詢的複雜資料轉儲問題提供了潛在的解決方案。本文旨在透過探討 LATERAL JOIN 和子查詢的用例和差異來闡明情況。
什麼是 LATERAL JOIN?
LATERAL JOIN 在 PostgreSQL 9.3 中引入,它允許子查詢或表函數出現在 FROM 子句中,使它們能夠引用來自前面 FROM 條目的列。與僅執行一次的普通子查詢不同,LATERAL JOIN 對左側連接的每一行都評估右側的表達式,類似於相關子查詢。
與相關子查詢的比較
LATERAL JOIN 類似於相關子查詢,但有一些關鍵差異。值得注意的是,LATERAL JOIN 可以傳回多列和多行,而相關子查詢通常僅限於單一值。此外,在 LATERAL JOIN 語法中,相關子查詢的等價物是 LEFT JOIN LATERAL ... ON true。
超越子查詢的功能
LATERAL JOIN 提供了子查詢難以實現的功能。例如,它們允許使用表函數、交叉引用多個 FROM 條目以及從多行傳回多列。它們還可以利用返回集合的函數來進行更有效率的操作。
SELECT 清單中的傳回集合函數
像 unnest() 這樣的傳回集合函數可以直接在 SELECT 清單中使用。雖然以前存在問題,但這在 PostgreSQL 10 之後得到了優化,為返回多行或多列提供了 LATERAL JOIN 的替代方案。但是,需要注意的是,在這種情況下,結果中行的缺失會消除整行,這與 LATERAL JOIN 不同。
以上是PostgreSQL 中的橫向連接與子查詢:什麼時候應該使用哪一個?的詳細內容。更多資訊請關注PHP中文網其他相關文章!