【发布时间】:2015-10-13 10:07:26
【问题描述】:
1.我创建一个表
create table sort (
a int,
b int,
primary key (a));
2.然后我插入了三条记录
insert into sort values(1, 10), (2, 10), (3, 10);
3.当我选择使用这个sql
select * from sort order by b;
它给出了这样的结果
+---+------+
| a | b |
+---+------+
| 1 | 10 |
| 2 | 10 |
| 3 | 10 |
+---+------+
-
当我选择表时使用这个查询
select * from sort order by b limit 1;
结果集是这样的
+---+------+
| a | b |
+---+------+
| 3 | 10 |
+---+------+
这不是我例外的(我认为返回第一条记录是合理的)。
我的 mysql 版本是 Ver 14.14 Distrib 5.6.23,适用于 osx10.8 (x86_64)
谁能给我解释一下?谢谢。
【问题讨论】:
-
为什么要返回第一个?您按“B”列排序,“A”列无关紧要,MySQL 将数据存储在文件中的方式与您在 GUI 中看到的方式不同,它对表进行排序并获取具有最低“B”值的列,是否有任何带有较低“B”的行?不,这意味着查询是正确的,如果要返回第一行,则按b,a添加顺序
-
有趣。我尝试了它(使用 innodb 和 myisam,以防有所不同),并得到第一行 (a=1) 作为限制 1 的结果(如您所料)。
-
@ogres 将其添加为答案
-
这仍然不是一个解释。当然,mysql 返回 3 行中的任何一行都没有问题,但我更喜欢对行为的实际解释。我试图复制它,但我不能。
-
你期待这个
order by b asc or desc