ホームページ > データベース > 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 以降では、CASE および COALESCE 式内でのセットを返す関数の使用が禁止されています。
  • 制御を改善し、予測可能な結果を​​得るには、LATERAL JOIN リストに複数の集合を返す関数を直接含めるのではなく、ROWS FROM (...)SELECT とともに使用することを強くお勧めします。

関連ドキュメント:

以上が複数のセットを返す関数は、異なるバージョン間で PostgreSQL の SELECT 句でどのように動作しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート