• SQL报错:order by不能直接出现在union的子句中


    一、背景知识

    在联合查询里order by 要写在最后一个子查询之后,并且该排序是对整个联合查询出来的结果集排序的,并不是只对最后一个子查询排序

    联合查询的结果是整个查询完成后得出的,而不是将子查询挨个完成后拼接的

     

    二、报错写法

    SELECT * FROM t1  ORDER BY month ASC
    UNION
    SELECT * FROM t2  ORDER BY month ASC

     

    三、冲突

    order by不能直接出现在union的子句中,但是可以出现在子句的子句中。

    可以通过两个查询分别加括号的方式,改成如下:

    (SELECT * FROM t1  ORDER BY month ASC)
    UNION
    (SELECT * FROM t2  ORDER BY month ASC)

    这种方式的目的是为了让两个结果集先分别order by,然后再对两个结果集进行union。虽然这种方式不报错,但是两个order by并没有效果,这是因为联合查询的结果是整个查询完成后得出的,而不是将子查询挨个完成后拼接的

    四、完美解决方案

    改成如下:

    SELECT * FROM
    (SELECT * FROM t1  ORDER BY month ASC) t3
    UNION
    SELECT * FROM
    (SELECT * FROM t2 ORDER BY month ASC) t4
  • 相关阅读:
    ES6之模块化
    ES6之展开运算符
    ES6之解构赋值
    ES6之对象的语法糖
    ES6之函数的语法糖
    ES6之模板字符串
    Exchanger详解
    DNS解析过程
    CyclicBarrier详解
    ConuntDownLatch详解
  • 原文地址:https://www.cnblogs.com/xuwinwin/p/15877703.html
Copyright © 2020-2023  润新知