Nous pouvons mettre la fonction de retour d'ensemble unnest()
dans le SELECT
list comme le suggère Raphaël
. Cela présentait des problèmes de cas de coin avant Postgres 10. Voir :
Depuis Postgres 9.3, nous pouvons également utiliser un LATERAL
rejoindre pour cela. C'est la manière la plus propre et la plus conforme aux normes de mettre des fonctions de retour d'ensemble dans le FROM
liste, pas dans le SELECT
liste :
SELECT name, value
FROM tbl, unnest(values) value; -- implicit CROSS JOIN LATERAL
Une différence subtile :cela supprime les lignes avec des values
vides / NULL du résultat depuis unnest()
renvoie aucune ligne , tandis que le même est converti en une valeur NULL dans le FROM
liste et retourné de toute façon. La requête équivalente à 100 % est :
SELECT t.name, v.value
FROM tbl t
LEFT JOIN unnest(t.values) v(value) ON true;
Voir :