一直以为 mysql 中 select 先于 order by 执行,但最近项目中遇到了问题发现并不是这样;
对问题做了下简化:表 t1 中有列 id,列中有 3 行数据[1, 2, 3]
# 输入
select id, @n:=@n+10 rank from t1, (select @n:=0) t2 order by rank desc;
# 输出
+------+------+
| id | rank |
+------+------+
| 3 | 30 |
| 2 | 20 |
| 1 | 10 |
+------+------+
# 输入
select id, @n:=@n+10 rank from t1, (select @n:=0) t2 order by id desc;
# 输出
+------+------+
| id | rank |
+------+------+
| 3 | 10 |
| 2 | 20 |
| 1 | 30 |
+------+------+
第一条 sql 按 rank 排序由于 rank 是 select 后才有的所以 select 先于 order by 执行,第二条 sql 按 id 排序结果 order by 先于 select 执行;
感觉有些莫名其妙,select 和 order by 的执行顺序究竟是怎么判断的?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.