2008-12-09 77 views
13

這是我第一次回答我自己的問題,因爲有人可能會遇到這個問題,所以它可能會有所幫助。使用Firebird,我想使用UNION ALL組合兩個查詢的結果,然後在給定列上對結果輸出進行排序。喜歡的東西:在Firebird中結合了UNION ALL和ORDER BY

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

括號從其他數據庫有效的語法來了,並且需要確保的參數UNION ALL(這是定義在表上工作的操作 - 即一個無序的記錄集)不要試圖單獨訂購。然而,我無法在Firebird中使用這種語法 - 它如何完成?

回答

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

謝謝你這麼多的工作......我無法工作,如何讓內條款沒有中間視圖。 – Chris 2008-12-09 21:18:25

+0

請注意,此查詢需要Firebird 2.x或更高版本 – alldayremix 2016-06-15 16:03:58

1

在視圖中執行UNION ALL(不帶ORDER BY子句),然後使用ORDER BY從視圖中選擇。

+0

+1「向後」兼容,其他的答案不火鳥1.5 – 2009-07-17 18:34:51

12

字段名不必相同。這就是爲什麼你不能按順序使用字段名稱的原因。
您可以改用字段索引。如:

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

正如所寫,這需要Firebird 2.x,但如果您刪除括號,這也將工作在Firebird 1.5 – alldayremix 2016-06-15 16:02:53

2

在火鳥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 
+0

+1「向後」兼容性,其他答案不會在Firebird 1.5中工作 – 2009-07-17 18:35:07

4

如何:

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

至少在新火鳥版本它可以工作,如果您通過「數量」而不是使用訂單一個別名。

0

order by移動到查詢尾部有對輸出數據網格的影響。

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 
)