Combinando UNION ALL e ORDER BY em Firebird

votos
13

Esta é a minha primeira tentativa de responder a minha própria pergunta, desde que alguém pode muito bem passar por essa e por isso pode ser de ajuda. Usando Firebird, quero combinar os resultados de duas consultas usando UNION ALL, em seguida, classificar a saída resultante em uma determinada coluna. Algo como:

(select C1, C2, C3 from T1)
union all 
(select C1, C2, C3 from T2)
order by C3

Os parênteses veio de sintaxe válida para outros bancos de dados, e são necessários para garantir que os argumentos para UNION ALL (uma operação que está definido para trabalhar em mesas - ou seja, um desordenado conjunto de registros) não tente ser encomendados individualmente. No entanto eu não poderia obter esta sintaxe para trabalhar em Firebird - como isso pode ser feito?

Publicado 09/12/2008 em 22:00
fonte usuário
Em outras línguas...                            


6 respostas

votos
24

SELECT C1, C2, C3
FROM (
    select C1, C2, C3 from T1
    union all 
    select C1, C2, C3 from T2
)
order by C3
Respondeu 09/12/2008 em 22:08
fonte usuário

votos
12

Os nomes dos campos não são obrigados a ser igual. É por isso que você não pode usar o nome do campo na ordem de.
Você pode usar o índice de campo em seu lugar. Como em:

(select C1, C2, C3 from T1)
union all 
(select C7, C8, C9 from T2)
order by 3  
Respondeu 09/12/2008 em 23:18
fonte usuário

votos
4

E se:

select C1, C2, C3 from T1
union all 
select C1, C2, C3 from T2
order by 2

Pelo menos nas versões mais recentes do Firebird funciona se você pedir por "Number" em vez de usar um Alias.

Respondeu 23/06/2015 em 15:15
fonte usuário

votos
2

Em Firebird 1.5 isso funciona para mim

create view V1 (C1, C2, C3) as
  select C1, C2, C3 from T1
  union all 
  select C1, C2, C3 from T2

e depois

select C1, C2, C3 from V1 order by C3
Respondeu 03/02/2009 em 15:48
fonte usuário

votos
1

Execute o UNION ALL em uma visão (sem a cláusula ORDER BY), em seguida, selecione a partir da visão usando ORDER BY.

Respondeu 09/12/2008 em 22:02
fonte usuário

votos
0

Movendo-se order byem um rabo de consulta tem nenhum efeito para datagrid saída.

select * from (
    select first 1
        C1
    from T1
    order by id desc
)
union all
select * from (
    select first 1
        C1
    from T2
    order by id desc
)
Respondeu 17/04/2017 em 21:59
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more