Maison >base de données >tutoriel mysql >Comment appeler une fonction de retour d'ensemble plusieurs fois avec des arguments de tableau dans 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!