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: