Estás llamando a unnest
3 veces en FROM
cláusula, eso significa que está haciendo un CROSS JOIN
(producto cartesiano) de los 3.
Si está en PostgreSQL 9.4 o superior, puede simplemente hacer una llamada de unnest
dando cada matriz como entrada:
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)
Otra opción, para cualquier versión, es agregar la llamada a unnest
en SELECT
en lugar de 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
En ambos casos, pero especialmente en el último, debes asegurarte de que cada matriz tenga exactamente el mismo número de elementos. Si no lo hace en el primer método, cada fila faltante se completará como NULL, pero en el segundo devolverá tantas filas como LCM del número de filas devueltas por cada uno, lo que probablemente no desee. Ejemplo:
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)
Consulte la documentación en llamadas a funciones de tabla para más información.