Stai chiamando unnest
3 volte su FROM
clausola, ciò significa che stai facendo un CROSS JOIN
(prodotto cartesiano) del 3.
Se utilizzi PostgreSQL 9.4 o versioni successive, puoi semplicemente eseguire una chiamata di unnest
dando ogni array come 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)
Un'altra opzione, per qualsiasi versione, è aggiungere la chiamata a unnest
in SELECT
invece di 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 entrambi i casi, ma specialmente nell'ultimo, devi assicurarti che ogni array abbia esattamente lo stesso numero di elementi. In caso contrario sul primo metodo, ogni riga mancante verrà riempita come NULL, ma la seconda restituirà tante righe quante sono LCM del numero di righe restituite da ciascuna, ciò che probabilmente non vuoi. Esempio:
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)
Consulta la documentazione su chiamate a funzioni tabella per ulteriori informazioni.