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中文网其他相关文章!