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
Linda Hamiltonoriginal
2024-12-31 17:27:10252parcourir

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;

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)

Vous pouvez également utiliser le raccourci :

, foo(sub.arr)

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:
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