Combinando UNION ALL e ORDER BY em Firebird
-
21-08-2019 - |
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
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
)