open manager maestro gui full for flamerobin sql database database-design firebird

sql - manager - flamerobin firebird



Combinando UNION ALL y ORDER BY en Firebird (6)

Los nombres de campo no son obligatorios para ser iguales. Es por eso que no puede usar el nombre del campo en el orden por.
Puede usar el índice de campo en su lugar. Como en:

(select C1, C2, C3 from T1) union all (select C7, C8, C9 from T2) order by 3

Este es mi primer intento de responder mi propia pregunta, ya que alguien podría encontrarse con esto y podría ser de ayuda. Usando Firebird, quiero combinar los resultados de dos consultas usando UNION ALL, luego ordenar el resultado resultante en una columna dada. Algo como:

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

Los paréntesis provienen de la sintaxis válida para otras bases de datos, y son necesarios para asegurarse de que los argumentos a UNION ALL (una operación que está definida para trabajar en tablas, es decir, un conjunto de registros desordenados ) no intenten pedirse individualmente. Sin embargo, no pude lograr que esta sintaxis funcionara en Firebird, ¿cómo se puede hacer?


Realice UNION ALL en una vista (sin la cláusula ORDER BY), luego seleccione de la vista usando ORDER BY.


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


En Firebird 1.5 esto funciona para mí

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

y entonces

select C1, C2, C3 from V1 order by C3


Qué tal si:

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

Al menos en las nuevas versiones de Firebird funciona si ordena por "Número" en lugar de usar un alias.


Mover la order by hacia una cola de consulta no tiene ningún efecto para generar la cuadrícula de datos.

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 )