Dzwonisz unnest
3 razy na FROM
klauzula, co oznacza, że wykonujesz CROSS JOIN
(produkt kartezjański) 3.
Jeśli korzystasz z PostgreSQL 9.4 lub nowszego, możesz po prostu wykonać jedno wywołanie unnest
podając każdą tablicę jako dane wejściowe:
select * from
unnest(
array['2001622', '2001624', '2007903'],
array[15,14,8],
array['type1', 'type1', 'type1'],
array[false, true, true]
) as u(id, ver, type, enabled)
Inną opcją, dla dowolnej wersji, jest dodanie wywołania do unnest
w SELECT
zamiast FROM
:
select
unnest(array['2001622', '2001624', '2007903']) as id,
unnest(array[15,14,8]) as ver,
unnest(array['type1', 'type1', 'type1']) as type,
unnest(array[false, true, true]) as enabled
W obu przypadkach, ale szczególnie w ostatnim, musisz upewnić się, że każda tablica ma dokładnie taką samą liczbę elementów. Jeśli tak nie jest w pierwszej metodzie, każdy brakujący wiersz zostanie wypełniony jako NULL, ale drugi zwróci tyle wierszy, ile LCM liczby wierszy zwracanych przez każdy, czego prawdopodobnie nie chcesz. Przykład:
SELECT * FROM unnest(array[1,2,3,4], array['a','b','c','d','e','f']);
unnest | unnest
--------+--------
1 | a
2 | b
3 | c
4 | d
[null] | e
[null] | f
(6 rows)
SELECT unnest(array[1,2,3,4]), unnest(array['a','b','c','d','e','f']);
unnest | unnest
--------+--------
1 | a
2 | b
3 | c
4 | d
1 | e
2 | f
3 | a
4 | b
1 | c
2 | d
3 | e
4 | f
(12 rows)
Zapoznaj się z dokumentacją wywołaniami funkcji tabel aby uzyskać więcej informacji.