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: