web-dev-qa-db-ja.com

FirebirdでUNIONALLとORDERBYを組み合わせる

誰かがこれに遭遇する可能性があり、それが助けになるかもしれないので、これは私自身の質問に答える私の最初の試みです。 Firebirdを使用して、UNION ALLを使用して2つのクエリの結果を結合し、結果の出力を特定の列に並べ替えたいと思います。何かのようなもの:

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

括弧は他のデータベースの有効な構文からのものであり、UNION ALL(テーブルで機能するように定義されている操作-つまり、 注文なし レコードのセット)を個別に注文しようとしないでください。ただし、この構文をFirebirdで機能させることができませんでした。どうすればよいでしょうか。

15
Chris
SELECT C1, C2, C3
FROM (
    select C1, C2, C3 from T1
    union all 
    select C1, C2, C3 from T2
)
order by C3
27
Cade Roux

フィールド名は同じである必要はありません。そのため、フィールド名をbyの順序で使用することはできません。
代わりにフィールドインデックスを使用できます。のように:

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

どうですか:

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

少なくとも新しいFirebirdバージョンでは、エイリアスを使用する代わりに「番号」で注文すると機能します。

7
KCM

Firebird 1.5では、これは私のために機能します

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

その後

select C1, C2, C3 from V1 order by C3
2
Tiago Moraes

ビュー(ORDER BY句なし)でUNION ALLを実行してから、ORDERBYを使用してビューから選択します。

1
Chris

引っ越しorder byクエリテールにnoデータグリッドを出力する効果があります。

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
)
0
kai3341