Maison > base de données > tutoriel mysql > Comment se comportent plusieurs fonctions de retour d'ensemble dans la clause SELECT de PostgreSQL dans différentes versions ?

Comment se comportent plusieurs fonctions de retour d'ensemble dans la clause SELECT de PostgreSQL dans différentes versions ?

Patricia Arquette
Libérer: 2025-01-17 23:42:09
original
874 Les gens l'ont consulté

How Do Multiple Set-Returning Functions Behave in PostgreSQL's SELECT Clause Across Different Versions?

Gestion par PostgreSQL de plusieurs fonctions de retour d'ensemble dans les instructions SELECT : une analyse spécifique à la version

Le comportement de PostgreSQL lorsqu'il rencontre plusieurs fonctions renvoyant un ensemble dans une instruction SELECT varie considérablement en fonction de la version de la base de données.

PostgreSQL 10 et versions ultérieures :

Dans les versions 10 et supérieures, ces fonctions s'exécutent de manière synchrone. La sortie est structurée de telle sorte que la fonction produisant le plus de lignes dicte le nombre total de lignes dans le jeu de résultats. Les sorties de fonction plus courtes sont complétées par des valeurs NULL pour maintenir cet alignement, créant ainsi un résultat de type jointure croisée.

PostgreSQL 9.6 et versions antérieures :

Avant la version 9.6, le résultat diffère considérablement. Le nombre total de lignes générées est égal au plus petit commun multiple (LCM) du nombre de lignes de chaque fonction renvoyant un ensemble. Cela peut conduire à des résultats imprévisibles et potentiellement indésirables, en particulier lorsque le nombre de lignes ne partage aucun facteur commun.

Exemple illustratif :

Examinons la requête :

<code class="language-sql">SELECT generate_series(1, 3), generate_series(5, 7);</code>
Copier après la connexion

Sortie PostgreSQL 10 :

<code> generate_series | generate_series 
-----------------+-----------------
               1 |               5
               2 |               6
               3 |               7
               NULL |               NULL
               NULL |               NULL
               NULL |               NULL</code>
Copier après la connexion

PostgreSQL 9.6 - Sortie :

<code> generate_series | generate_series 
-----------------+-----------------
               1 |               5
               2 |               6
               3 |               7
               1 |               5
               2 |               6
               3 |               7
               1 |               5
               2 |               6
               3 |               7</code>
Copier après la connexion

Considérations clés :

  • PostgreSQL 10 et versions ultérieures interdisent l'utilisation de fonctions renvoyant un ensemble dans les expressions CASE et COALESCE.
  • Pour un contrôle amélioré et des résultats prévisibles, il est fortement recommandé d'utiliser LATERAL JOIN avec ROWS FROM (...) au lieu d'inclure directement plusieurs fonctions de retour d'ensemble dans la liste SELECT.

Documentation pertinente :

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal