我有一张表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
?
答案 0 :(得分:0)
单个查询,当它们之间存在联合时,不能有Order By
子句。
供参考
http://p2p.wrox.com/sql-language/17907-union-order.html
这是Order By与Union
一起使用的示例