Voláte unnest 3krát na FROM klauzule, to znamená, že provádíte CROSS JOIN (kartézský součin) 3.
Pokud používáte PostgreSQL 9.4 nebo vyšší, můžete jednoduše provést jedno volání unnest zadáním každého pole jako vstupu:
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)
Další možností pro jakoukoli verzi je přidat volání do unnest v SELECT místo 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
V obou případech, ale zvláště v tom posledním, si musíte být jisti, že každé pole má přesně stejný počet prvků. Pokud tomu tak není u první metody, každý chybějící řádek bude vyplněn jako NULL, ale druhý vrátí tolik řádků, kolik je LCM z počtu řádků vrácených každým, což pravděpodobně nechcete. Příklad:
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)
Zkontrolujte dokumentaci k volání funkcí tabulky pro více informací.