Maison > base de données > tutoriel mysql > Comment appeler une fonction de retour d'ensemble plusieurs fois avec des arguments de tableau dans PostgreSQL ?

Comment appeler une fonction de retour d'ensemble plusieurs fois avec des arguments de tableau dans PostgreSQL ?

Linda Hamilton
Libérer: 2024-12-31 17:27:10
original
268 Les gens l'ont consulté

How to Call a Set-Returning Function Multiple Times with Array Arguments in PostgreSQL?

Appel d'une fonction de retour d'ensemble avec des arguments de tableau plusieurs fois

Vous disposez d'une fonction qui traite un tableau de lignes avec un paramètre donné et renvoie un ensemble de lignes avec une colonne supplémentaire.

Question : Comment pouvez-vous appeler cela fonctionner plusieurs fois sur différents groupes de données sans passer un dataid à la fonction ?

Réponse :

Dans Postgres 9.3 ou version ultérieure, utilisez LEFT JOIN LATERAL... ON true syntax :

SELECT sub.dataid, f.*
FROM  (
   SELECT dataid, array_agg(data) AS arr
   FROM   dataset
   WHERE  dataid = something
   GROUP  BY 1
   ) sub
LEFT   JOIN LATERAL foo(sub.arr) f ON true;
Copier après la connexion

Si la fonction foo() ne peut renvoyer aucune ligne, ce formulaire conservera toutes les lignes à gauche de la jointure, même lorsqu'aucune ligne n'est renvoyée à droite.

Si la fonction ne peut renvoyer aucune ligne, ou si vous souhaitez exclure les lignes sans résultats de la jointure latérale, utilisez :

CROSS JOIN LATERAL foo(sub.arr)
Copier après la connexion

Vous pouvez également utiliser le raccourci :

, foo(sub.arr)
Copier après la connexion

Cette méthode est recommandée pour Postgres 9.3 et versions ultérieures. Pour les versions antérieures, reportez-vous aux autres solutions disponibles.

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!

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