Clause PostgreSQL SELECT : comportement de plusieurs fonctions de retour d'ensemble
L'interaction de plusieurs fonctions de retour d'ensemble (SRF) au sein d'une clause PostgreSQL SELECT
dépend de la version. Comprendre ce comportement est crucial pour des résultats de requête prévisibles.
PostgreSQL 10 et versions ultérieures :
Dans PostgreSQL 10 et versions ultérieures, les SRF sont traités avant les expressions scalaires dans la liste SELECT
. Cela équivaut fonctionnellement à les utiliser dans une clause LATERAL FROM
. Le système génère des lignes de sortie de manière itérative : d'abord en utilisant le résultat initial de chaque SRF, puis le deuxième résultat de chacun, et ainsi de suite.
Si les SRF renvoient un nombre de lignes variable, les résultats les plus courts sont complétés avec des valeurs NULL
pour correspondre à la longueur de l'ensemble de résultats le plus long. Cela garantit que toutes les lignes de sortie ont le même nombre de colonnes.
PostgreSQL 9.6 et versions antérieures :
Les anciennes versions (9.6 et inférieures) présentent un comportement différent. Le nombre total de lignes de sortie devient le plus petit commun multiple (LCM) du nombre de lignes généré par chaque SRF. Cela peut conduire à des résultats inattendus et potentiellement imprévisibles, en particulier lorsque les tailles des ensembles de résultats SRF ne partagent aucun diviseur commun.
Bonnes pratiques :
Pour éviter toute ambiguïté et garantir des résultats cohérents entre les versions de PostgreSQL, il est fortement conseillé d'éviter d'utiliser plusieurs SRF directement dans la liste SELECT
, en particulier dans les anciennes versions de PostgreSQL. La jointure LATERAL
offre une approche plus claire, plus prévisible et compatible entre versions pour gérer plusieurs SRF.
Lectures complémentaires :
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!