sql >> Base de Datos >  >> RDS >> PostgreSQL

SQL UNNEST múltiple en una sola lista de selección

No se trata de unnest como tal, sino del manejo muy extraño de PostgreSQL de múltiples funciones de devolución de conjuntos en SELECT lista. Funciones de devolución de conjuntos en SELECT no forman parte del estándar ANSI SQL.

Encontrarás un comportamiento mucho más sano con LATERAL consultas, que deberían ser preferibles al uso de una función de devolución de conjuntos en FROM tanto como sea posible:

select a, b FROM unnest(array[1,2]) a, LATERAL unnest(array[1,2,3]) b;

por ejemplo

regress=> select a, b FROM unnest(array[1,2]) a, LATERAL unnest(array[1,2,3]) b;
 a | b 
---+---
 1 | 1
 1 | 2
 1 | 3
 2 | 1
 2 | 2
 2 | 3
(6 rows)

La única vez que sigo usando múltiples funciones de devolución de conjuntos en SELECT es cuando quiero emparejar valores de funciones que devuelven el mismo número de filas. La necesidad de eso desaparecerá en 9.4, con argumentos múltiples unnest y con soporte para WITH ORDINALITY .