10.5. Construções UNION, CASE e ARRAY

PostgreSQL 14.5: UNION, CASE e construções relacionadas

As construções UNION do SQL precisam unir tipos, que podem não ser semelhantes, para que se tornem um único conjunto de resultados. O algoritmo de resolução é aplicado separadamente a cada coluna de saída da consulta união. As construções INTERSECT e EXCEPT resolvem tipos não semelhantes do mesmo modo que UNION. As construções CASE e ARRAY utilizam um algoritmo idêntico para fazer a correspondência das expressões componentes e selecionar o tipo de dado do resultado.

Resolução do tipo em UNION, CASE e ARRAY

  1. Se todas as entradas forem do tipo unknown, é resolvido como sendo do tipo text (o tipo preferido da categoria cadeia de caracteres). Senão, ignorar as entradas unknown ao escolher o tipo do resultado.

  2. Se as entradas não-desconhecidas não forem todas da mesma categoria de tipo, falhar.

  3. Escolher o primeiro tipo de entrada não-desconhecido que for o tipo preferido nesta categoria, ou que permita todas as entradas não-desconhecidas serem convertidas implicitamente no mesmo.

  4. Converter todas as entradas no tipo selecionado.

Seguem alguns exemplos.

Exemplo 10-7. Resolução do tipo com tipos subespecificados em uma união

=> SELECT text 'a' AS "texto" UNION SELECT 'b';

 texto
-------
 a
 b
(2 linhas)

Neste caso, o literal de tipo desconhecido 'b' é resolvido como sendo do tipo text.

Exemplo 10-8. Resolução do tipo em uma união simples

=> SELECT 1.2 AS "numérico" UNION SELECT 1;

 numérico
----------
        1
      1.2
(2 linhas)

O literal 1.2 é do tipo numeric, e o valor inteiro 1 pode ser convertido implicitamente em numeric, portanto este tipo é utilizado.

Exemplo 10-9. Resolução do tipo em uma união transposta

=> SELECT 1 AS "real" UNION SELECT CAST('2.2' AS REAL);

 real
------
    1
  2.2
(2 linhas)

Neste caso, como o tipo real não pode ser convertido implicitamente em integer, mas integer pode ser implicitamente convertido em real, o tipo do resultado da união é resolvido como real.

SourceForge.net Logo CSS válido!