PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

SQL múltiplo UNNEST em uma única lista de seleção


Não se trata de unnest como tal, mas sobre o manuseio muito estranho do PostgreSQL de várias funções de retorno de conjunto no SELECT Lista. Funções de retorno de set em SELECT não fazem parte do padrão ANSI SQL.

Você achará o comportamento muito mais sensato com LATERAL consultas, que devem ser preferidas em vez de usar uma função de retorno de conjunto em FROM tanto quanto possível:
select a, b FROM unnest(array[1,2]) a, LATERAL unnest(array[1,2,3]) b;

por exemplo.
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)

A única vez que ainda uso várias funções de retorno de conjunto em SELECT é quando eu quero emparelhar valores de funções que retornam o mesmo número de linhas. A necessidade disso desaparecerá na versão 9.4, com vários argumentos unnest e com suporte para WITH ORDINALITY .