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
.