使用ORDER BY和UNION的两个查询 - 需要解释

时间:2011-12-08 16:50:27

标签: mysql

我有一张表TestTable

IntCol
1
4
6
2
3
8
12
11
9
7
15
13
14

(数字从1到15,不包括10)。

当我这样做时......

SELECT * FROM 
    (SELECT IntCol
    FROM TestTable
    WHERE IntCol >= 10
    ORDER BY IntCol ASC) x1
UNION ALL
SELECT * FROM 
    (SELECT IntCol
    FROM TestTable
    WHERE IntCol < 10
    ORDER BY IntCol DESC) x2

...结果还可以(首先是11到15 ASCending,然后是1到9 DECSending):

IntCol
11
12
13
14
15
9
8
7
6
4
3
2
1

但是当我省略SELECT * FROM并做...

    (SELECT IntCol
    FROM TestTable
    WHERE IntCol >= 10
    ORDER BY IntCol ASC)
UNION ALL
    (SELECT IntCol
    FROM TestTable
    WHERE IntCol < 10
    ORDER BY IntCol DESC)

...行根本没有排序(只有大于10的值才是第一个)。结果是:

IntCol
12
11
15
13
14
1
4
6
2
3
8
9
7

我的问题是:为什么在UNIONing排序行时需要这个SELECT * FROM

1 个答案:

答案 0 :(得分:0)

单个查询,当它们之间存在联合时,不能有Order By子句。

供参考

http://p2p.wrox.com/sql-language/17907-union-order.html

这是Order By与Union

一起使用的示例

http://www.techonthenet.com/sql/union.php