Pergunta

Esta é 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 o trabalho nas mesas - ou seja, um não ordenada conjunto de registros) don' t tentar ser encomendados individualmente. No entanto eu não poderia obter esta sintaxe para trabalhar em Firebird - como isso pode ser feito

Foi útil?

Solução

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

Outras dicas

Nomes de 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  

Como sobre: ??

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.

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

select C1, C2, C3 from V1 order by C3

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

Mover order by em um rabo de consulta tem não efeito de 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
)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top