Podemos poner la función de devolución de conjuntos unnest()
en el SELECT
lista como sugiere Raphaël
. Esto solía exhibir problemas de casos de esquina antes de Postgres 10. Ver:
Desde Postgres 9.3 también podemos usar un LATERAL
únete para esto. Es la forma más limpia y compatible con el estándar de poner funciones de devolución de conjuntos en el FROM
lista, no en SELECT
lista:
SELECT name, value
FROM tbl, unnest(values) value; -- implicit CROSS JOIN LATERAL
Una diferencia sutil:esto descarta filas con valores values
vacíos / NULL del resultado desde unnest()
devuelve ninguna fila , mientras que el mismo se convierte a un valor NULL en el FROM
lista y regresó de todos modos. La consulta 100 % equivalente es:
SELECT t.name, v.value
FROM tbl t
LEFT JOIN unnest(t.values) v(value) ON true;
Ver: