Frage

Dies ist mein erster Versuch, meine eigene Frage zu beantworten, da möglicherweise jemand darauf stößt und es daher hilfreich sein könnte.Mit Firebird möchte ich die Ergebnisse zweier Abfragen mit UNION ALL kombinieren und dann die resultierende Ausgabe nach einer bestimmten Spalte sortieren.Etwas wie:

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

Die Klammern stammen aus einer gültigen Syntax für andere Datenbanken und werden benötigt, um sicherzustellen, dass die Argumente für UNION ALL (eine Operation, die für die Arbeit mit Tabellen definiert ist – d. h.ein ungeordnet Satz von Datensätzen) versuchen Sie nicht, einzeln bestellt zu werden.Allerdings konnte ich diese Syntax in Firebird nicht zum Laufen bringen – wie kann das gemacht werden?

War es hilfreich?

Lösung

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

Andere Tipps

Feldnamen werden nicht gleich sein. Deshalb sollten Sie nicht die Feldnamen in der Reihenfolge verwenden können.
Sie können das Feld Index stattdessen verwenden. Wie in:

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

Wie wäre es mit:

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

Zumindest in den neueren Firebird-Versionen funktioniert es, wenn Sie nach „Nummer“ sortieren, anstatt einen Alias ​​zu verwenden.

In Firebird 1.5 funktioniert dies für mich

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

und dann

select C1, C2, C3 from V1 order by C3

Führen Sie die UNION ALL in einer Ansicht (ohne die ORDER BY-Klausel), dann aus der Sicht wählen ORDER BY verwendet wird.

Umzug order by in eine Abfrage Schwanz hat nicht Effekt Ausgang Datagrid.

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
)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top