Du ringer unnest
3 gånger på FROM
klausul, det betyder att du gör en CROSS JOIN
(kartesisk produkt) av 3.
Om du använder PostgreSQL 9.4 eller högre kan du enkelt göra ett anrop av unnest
ger varje array som indata:
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)
Ett annat alternativ, för alla versioner, är att lägga till anropet till unnest
i SELECT
istället för 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
I båda fallen, men speciellt i det sista, måste du vara säker på att varje array har exakt samma antal element. Om det inte gör det på den första metoden kommer varje saknad rad att fyllas som NULL, men den andra kommer att returnera lika många rader som LCM av antalet rader som returneras av var och en, vad du förmodligen inte vill ha. Exempel:
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)
Kontrollera dokumentationen om anrop av tabellfunktioner för mer information.