PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Appiattimento di una relazione con un array per emettere una riga per voce dell'array

Possiamo inserire la funzione di restituzione del set unnest() nel SELECT list come suggerisce Raphaël . Ciò mostrava problemi con i casi d'angolo prima di Postgres 10. Vedi:

Da Postgres 9.3 possiamo anche usare un LATERAL unisciti per questo. È il modo più pulito e conforme agli standard per inserire le funzioni di restituzione dei set nel FROM elenco, non nel SELECT elenco:

SELECT name, value
FROM   tbl, unnest(values) value;  -- implicit CROSS JOIN LATERAL

Una sottile differenza:questo elimina le righe con values vuoti / NULL dal risultato da unnest() restituisce nessuna riga , mentre lo stesso viene convertito in un valore NULL nel FROM elenco e restituito comunque. La query equivalente al 100% è:

SELECT t.name, v.value
FROM   tbl t
LEFT   JOIN unnest(t.values) v(value) ON true;

Vedi: