首页 > 数据库 > 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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板