PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

SQL multiple UNNEST dans une seule liste de sélection

Il ne s'agit pas de désimbriquer en tant que tel, mais de la gestion très étrange de PostgreSQL de plusieurs fonctions de retour d'ensembles dans le SELECT liste. Fonctions de retour d'ensemble dans SELECT ne font pas partie de la norme ANSI SQL.

Vous trouverez un comportement beaucoup plus sain avec LATERAL les requêtes, qui devraient être préférées à l'utilisation d'une fonction renvoyant un ensemble dans FROM autant que possible :

select a, b FROM unnest(array[1,2]) a, LATERAL unnest(array[1,2,3]) b;

ex.

regress=> select a, b FROM unnest(array[1,2]) a, LATERAL unnest(array[1,2,3]) b;
 a | b 
---+---
 1 | 1
 1 | 2
 1 | 3
 2 | 1
 2 | 2
 2 | 3
(6 rows)

La seule fois où j'utilise encore plusieurs fonctions de retour d'ensemble dans SELECT est quand je veux associer des valeurs de fonctions qui renvoient toutes deux le même nombre de lignes. Le besoin de cela disparaîtra dans 9.4, avec le multi-argument unnest et avec prise en charge de WITH ORDINALITY .