sql >> Base de Datos >  >> RDS >> PostgreSQL

Aplanar una relación con una matriz para emitir una fila por entrada de matriz

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: