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í.