Je belt unnest
3 keer op FROM
clausule, dat betekent dat je een CROSS JOIN
. doet (cartesisch product) van de 3.
Als u PostgreSQL 9.4 of hoger gebruikt, kunt u eenvoudig een aanroep doen van unnest
elke array als invoer geven:
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)
Een andere optie, voor elke versie, is om de aanroep toe te voegen aan unnest
in SELECT
in plaats van 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
In beide gevallen, maar vooral in het laatste geval, moet u er zeker van zijn dat elke array exact hetzelfde aantal elementen heeft. Als dit niet het geval is bij de eerste methode, zal elke ontbrekende rij worden gevuld als NULL, maar de tweede zal evenveel rijen retourneren als de LCM van het aantal rijen dat door elk wordt geretourneerd, wat u waarschijnlijk niet wilt. Voorbeeld:
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)
Raadpleeg de documentatie over aanroepen van tabelfuncties voor meer informatie.