Łącząc UNION ALL i ORDER BY w Firebird

głosy
13

Jest to moja pierwsza próba odpowiedzi na moje własne pytanie, ponieważ ktoś może dobrze napotkasz to i tak może to być pomocne. Korzystanie Firebird, chcę połączyć wyniki dwóch zapytań wykorzystujących UNION ALL, a następnie posortować powstałego wyjście na danej kolumnie. Coś jak:

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

Nawiasy pochodzi poprawnej składni innych baz danych, a są potrzebne, aby upewnić się, że argumenty Union wszystko (operacji, która jest zdefiniowana do pracy na stołach - czyli nieuporządkowana zestaw rekordów) nie starają się być zamawiane osobno. Jednak nie mogę dostać tej składni do pracy w Firebird - jak można to zrobić?

Utwórz 09/12/2008 o 22:00
źródło użytkownik
W innych językach...                            


6 odpowiedzi

głosy
1

Wykonaj UNION ALL w widoku (bez klauzuli ORDER BY), a następnie wybierz z widoku za pomocą ORDER BY.

Odpowiedział 09/12/2008 o 22:02
źródło użytkownik

głosy
24

SELECT C1, C2, C3
FROM (
    select C1, C2, C3 from T1
    union all 
    select C1, C2, C3 from T2
)
order by C3
Odpowiedział 09/12/2008 o 22:08
źródło użytkownik

głosy
12

Nazwy pól nie muszą być równe. Dlatego nie można użyć nazwy pola w kolejności wg.
Użytkownik może korzystać z indeksu pola zamiast. Jak w:

(select C1, C2, C3 from T1)
union all 
(select C7, C8, C9 from T2)
order by 3  
Odpowiedział 09/12/2008 o 23:18
źródło użytkownik

głosy
2

W Firebird 1.5 działa to dla mnie

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

i wtedy

select C1, C2, C3 from V1 order by C3
Odpowiedział 03/02/2009 o 15:48
źródło użytkownik

głosy
4

Co powiesz na:

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

Przynajmniej w nowszych wersjach Firebird to działa, jeśli zamówienie przez „Number” zamiast używać pseudonimu.

Odpowiedział 23/06/2015 o 15:15
źródło użytkownik

głosy
0

Poruszanie order bysię w ogonie zapytań ma żadnego wpływu na wyjściu 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
)
Odpowiedział 17/04/2017 o 21:59
źródło użytkownik

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