Wir können die set-returning-Funktion unnest()
in das SELECT
Liste wie Raphaël vorschlägt
. Dies führte vor Postgres 10 zu Eckfallproblemen. Siehe:
Seit Postgres 9.3 können wir auch einen verwenden LATERAL
schließen Sie sich dafür an. Es ist die sauberere, standardkonforme Art, satzrückgebende Funktionen in FROM
einzufügen Liste, nicht in die SELECT
Liste:
SELECT name, value
FROM tbl, unnest(values) value; -- implicit CROSS JOIN LATERAL
Ein subtiler Unterschied:Dadurch werden Zeilen mit leeren / NULL values
gelöscht aus dem Ergebnis seit unnest()
gibt keine Zeile zurück , während dasselbe im FROM
in einen NULL-Wert umgewandelt wird Liste und trotzdem zurückgegeben. Die zu 100 % äquivalente Abfrage lautet:
SELECT t.name, v.value
FROM tbl t
LEFT JOIN unnest(t.values) v(value) ON true;
Siehe: