table1结构如下:
id sort
1 1
2 2
3 2
4 2
5 3
6 4
查询语句如下:
select id from table1 order by sortselect top 3 id from table1 order by sort
查询结果如下:
怎么top 3之后查询结果就和我们所想的“1,2,3”不一样了呢?而且我反复执行“select top 3 id from table1 order by sort”结果还是“1 4 3”,这又是为什么呢?
后来我修改了我的sql语句
select top 3 id from table1 order by sort,id asc
结果如下:
正确了。
很容易可以发现,我们这里sort的值2,3,4都是相同的 原因肯定在这儿 可以看到id=4 和id=3 的时候 他是先排id=4 然后在排id=3,奇怪为什么呢?
他的排序原理是什么呢?
做一个实验
1、修改查询语句:
select top 4 id from table1 order by sort
结果如下:
总结:使用top获取数据,按照sort排序时, 对待sort值相等的行-------按照id降序排序
2、修改表结构:
id sort
1 1
2 2
3 2
4 2
5 3
6 4
7 3修改查询语句:
select top 5 id from table1 order by sort
查询结果如下:
可以看到id=7和id=5的时候 上述总结不成立
总结:使用top获取数据,按照sort排序时, 对待sort值相等且相邻的行-------按照id降序排序
3、验证我们刚才的总结,修改表结构:
id sort
1 1
2 2
3 2
4 2
5 3
6 4
7 38 3
修改查询语句:
select top 8 id from table1 order by sort
查询结果如下:
总结:同时使用top和order by时,如order by后出现值相同且相邻的行,将按照数据库表的唯一索引(主键)降序排序。
使用top和order by应注意处理order by后值相同的情况,最后手动指定能唯一标识行的字段进行做善后处理