首先看下官方文档
-
如果您想使用ORDER BY或LIMIT子句来对全部UNION结果进行分类或限制,则应对单个地SELECT语句加圆括
-
号,并把ORDER BY或LIMIT放到最后一个的后面。以下例子同时使用了这两个子句:
-
(SELECT a FROM tbl_name WHERE a=10 AND B=1)
-
UNION
-
(SELECT a FROM tbl_name WHERE a=11 AND B=2)
-
ORDER BY a LIMIT 10;
-
这种ORDER BY不能使用包括表名称(也就是,采用tbl_name.col_name格式的名称)列引用。可以在第一
-
个SELECT语句中提供一个列别名,并在ORDER BY中参阅别名,或使用列位置在ORDER BY中参阅列。(首选
-
采用别名,因为不建议使用列位置。)
-
另外,如果带分类的一列有别名,则ORDER BY子句必须引用别名,而不能引用列名称。以下语句中的第一个
-
语句必须运行,但是第二个会运行失败,出现在'order clause'中有未知列'a'的错误:
-
(SELECT a AS b FROM t) UNION (SELECT ...) ORDER BY b;
-
(SELECT a AS b FROM t) UNION (SELECT ...) ORDER BY a;
-
To apply ORDER BY or LIMIT to an individual SELECT, place the clause inside the parentheses that enclose
-
-
为了对单个SELECT使用ORDER BY或LIMIT,应把子句放入圆括号中。圆括号包含了SELECT:
-
(SELECT a FROM tbl_name WHERE a=10 AND B=1 ORDER BY a LIMIT 10)
-
UNION
-
(SELECT a FROM tbl_name WHERE a=11 AND B=2 ORDER BY a LIMIT 10);
-
圆括号中用于单个SELECT语句的ORDER BY只有当与LIMIT结合后,才起作用。否则,ORDER BY被优化去
-
除。
看几个关键点:
1、“如果您想使用ORDER BY或LIMIT子句来对全部UNION结果进行分类或限制,则应对单个地SELECT语句加圆括号,并把ORDER BY或LIMIT放到 最后一个的后面。”
--这个试验了下,发现 不加括号 把ORDER BY或者limit 放到最后会生效,但是最好还是把括号加上,以免引起阅读的误解。
2、“这种ORDER BY不能使用包括表名称(也就是,采用tbl_name.col_name格式的名称)列引用。可以在第一个SELECT语句中提供一个列别名,并在ORDER BY中参阅别名,或使用列位置在ORDER BY中参阅列。(首选采用别名,因为不建议使用列位置。)
另外,如果带分类的一列有别名,则ORDER BY子句必须引用别名,而不能引用列名称”
--试验证明确实如此,需要在使用中注意!
3、“为了对单个SELECT使用ORDER BY或LIMIT,应把子句放入圆括号中,且ORDER BY 与 Limit 同时使用才能生效,否则order by 会被优化去除”
--试验证明确实如此,如果要对单个select 排序 order by 必须结合 limit 来使用
举例:
建立一个vehicle 表
-
mysql> select * from vehicle;
-
+----+----------+------+---------------------+
-
| id | hphm | hpzl | jgsj |
-
+----+----------+------+---------------------+
-
| 1 | 冀X11111 | 轿车 | 2015-08-24 14:06:54 |
-
| 2 | 冀X11111 | 轿车 | 2015-08-24 14:07:12 |
-
| 3 | 冀X22222 | 轿车 | 2015-08-24 14:07:36 |
-
| 4 | 冀X22222 | 轿车 | 2015-08-24 13:07:49 |
-
| 5 | 冀X33333 | 客车 | 2015-08-24 14:08:12 |
-
| 6 | 冀X33333 | 客车 | 2015-08-24 14:08:51 |
-
+----+----------+------+---------------------+
结合limit 来使order by 生效
-
mysql> (select id,hphm,hpzl,jgsj from vehicle where hphm='冀X22222' order by jgsj desc ) union (select id,hphm,hpzl,jgsj from vehicle where hphm='冀X11111' order by jgsj desc);
-
+----+----------+------+---------------------+
-
| id | hphm | hpzl | jgsj |
-
+----+----------+------+---------------------+
-
| 4 | 冀X22222 | 轿车 | 2015-08-24 13:07:49 |
-
| 3 | 冀X22222 | 轿车 | 2015-08-24 14:07:36 |
-
| 1 | 冀X11111 | 轿车 | 2015-08-24 14:06:54 |
-
| 2 | 冀X11111 | 轿车 | 2015-08-24 14:07:12 |
-
+----+----------+------+---------------------+
-
4 rows in set
-
-
mysql> (select id,hphm,hpzl,jgsj from vehicle where hphm='冀X22222' order by jgsj desc limit 10) union (select id,hphm,hpzl,jgsj from vehicle where hphm='冀X11111' order by jgsj desc limit 10);
-
+----+----------+------+---------------------+
-
| id | hphm | hpzl | jgsj |
-
+----+----------+------+---------------------+
-
| 3 | 冀X22222 | 轿车 | 2015-08-24 14:07:36 |
-
| 4 | 冀X22222 | 轿车 | 2015-08-24 13:07:49 |
-
| 2 | 冀X11111 | 轿车 | 2015-08-24 14:07:12 |
-
| 1 | 冀X11111 | 轿车 | 2015-08-24 14:06:54 |
-
+----+----------+------+---------------------+
-
4 rows in set
阅读(1235) | 评论(0) | 转发(0) |