Du ringer til unnest
3 gange på FROM
klausul, det betyder, at du laver en CROSS JOIN
(kartesisk produkt) af 3.
Hvis du er på PostgreSQL 9.4 eller nyere, kan du nemt foretage et opkald af unnest
giver hvert array som input:
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)
En anden mulighed, for enhver version, er at tilføje opkaldet til unnest
i SELECT
i stedet for 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 begge tilfælde, men især på det sidste, skal du være sikker på, at hvert array har nøjagtigt det samme antal elementer. Hvis det ikke gør det på den første metode, vil hver manglende række blive udfyldt som NULL, men den anden vil den returnere lige så mange rækker som LCM af antallet af rækker returneret af hver, hvad du sandsynligvis ikke ønsker. Eksempel:
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)
Tjek dokumentationen om kald til tabelfunktioner for mere information.