在Firebird中组合UNION ALL和ORDER BY

时间:2008-12-09 21:00:59

标签: sql database database-design firebird

这是我第一次尝试回答我自己的问题,因为有人可能会碰到这个问题,所以它可能会有所帮助。使用Firebird,我想使用UNION ALL组合两个查询的结果,然后在给定列上对结果输出进行排序。类似的东西:

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

括号来自其他数据库的有效语法,需要确保UNION ALL的参数(定义为对表有效的操作 - 即无序记录集)不要尝试单独订购。但是我无法在Firebird中使用这种语法 - 如何才能完成?

6 个答案:

答案 0 :(得分:25)

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

答案 1 :(得分:12)

字段名称不必相等。这就是为什么你不能按顺序使用字段名称。
您可以改用字段索引。如:

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

答案 2 :(得分:6)

怎么样:

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

至少在较新的Firebird版本中,如果您按“数字”而不是使用别名进行排序,则它可以正常工作。

答案 3 :(得分: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

答案 4 :(得分:1)

在视图中执行UNION ALL(不带ORDER BY子句),然后使用ORDER BY从视图中选择。

答案 5 :(得分: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
)