Możemy umieścić funkcję zwracającą zestaw unnest()
do SELECT
lista jak sugeruje Raphaël
. Wykazywało to problemy ze sprawami narożnymi przed Postgresem 10. Zobacz:
Od Postgresa 9.3 możemy również użyć LATERAL
przyłączyć się do tego. Jest to czystszy, zgodny ze standardami sposób umieszczania funkcji zwracających zestaw w FROM
listy, a nie do SELECT
lista:
SELECT name, value
FROM tbl, unnest(values) value; -- implicit CROSS JOIN LATERAL
Jedna subtelna różnica:usuwa wiersze z pustymi / NULL values
z wyniku od unnest()
zwraca brak wiersza , podczas gdy to samo jest konwertowane na wartość NULL w FROM
listę i mimo to wrócił. W 100% równoważne zapytanie to:
SELECT t.name, v.value
FROM tbl t
LEFT JOIN unnest(t.values) v(value) ON true;
Zobacz: