16

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

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

かっこは、他のデータベースの有効な構文に由来するものであり、UNION ALL (テーブルで機能するように定義された操作 - つまり、順序付けされていない一連のレコード) への引数が個別に順序付けされないようにするために必要です。しかし、この構文を Firebird で動作させることができませんでした。

4

6 に答える 6

30
SELECT C1, C2, C3
FROM (
    select C1, C2, C3 from T1
    union all 
    select C1, C2, C3 from T2
)
order by C3
于 2008-12-09T21:08:04.620 に答える
12

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

(select C1, C2, C3 from T1)
union all 
(select C7, C8, C9 from T2)
order by 3  
于 2008-12-09T22:18:00.173 に答える
7

どうですか:

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

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

于 2015-06-23T15:15:12.237 に答える
2

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
于 2009-02-03T14:48:14.843 に答える
1

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

于 2008-12-09T21:02:06.317 に答える