【问题标题】:Combining UNION ALL and ORDER BY in Firebird在 Firebird 中结合 UNION ALL 和 ORDER BY
【发布时间】:2010-09-26 03:15:50
【问题描述】:

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

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

括号来自其他数据库的有效语法,并且需要确保 UNION ALL 的参数(定义为在表上工作的操作 - 即 无序 记录集)不' t 尝试单独订购。但是我无法让这种语法在 Firebird 中工作 - 怎么做?

【问题讨论】:

    标签: sql database database-design firebird


    【解决方案1】:

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

    【讨论】:

    • +1 表示“向后”兼容性,其他答案在 Firebird 1.5 中不起作用
    【解决方案2】:
    SELECT C1, C2, C3
    FROM (
        select C1, C2, C3 from T1
        union all 
        select C1, C2, C3 from T2
    )
    order by C3
    

    【讨论】:

    • 请注意,此查询需要 Firebird 2.x 或更高版本
    【解决方案3】:

    字段名称不需要相同。这就是为什么您不能在 order by 中使用字段名称的原因。
    您可以改用字段索引。如:

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

    【讨论】:

    • 正如所写,这需要 Firebird 2.x,但如果您删除括号,这也适用于 Firebird 1.5
    【解决方案4】:

    在 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
    

    【讨论】:

    • +1 表示“向后”兼容性,其他答案在 Firebird 1.5 中不起作用
    • @Chris 这与克里斯的答案相同。你应该删除你的或改进克里斯的答案;)
    【解决方案5】:

    怎么样:

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

    至少在较新的 Firebird 版本中,如果您按“编号”而不是使用别名进行订购,它可以工作。

    【讨论】:

      【解决方案6】:

      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
      )

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多