mybatis结果集顺序求解惑

整俩硬菜 发布于 2013/05/28 11:11
阅读 3K+
收藏 0
遇到一个奇怪的问题,查询语句如下:

select id, title from t_product where id in (10177,10100,10199,10014,10010);

传入的5个id的编号是乱序的,使用mybaits查处后list结果集竟然排序了,排成了

10010,10014,10100,10177,10199,请问如何让mybatis按照传入的list的顺序返回呢?

加载中
0
wartskcaj
wartskcaj

如果是mysql可以用order by field

select id, title from t_product where id in (10177,10100,10199,10014,10010) order by field(id,10177,10100,10199,10014,10010);

http://dev.mysql.com/doc/refman/5.0/en/sorting-rows.html


0
魔力猫
魔力猫
除非你指定结果集的排序,不然SQL以什么顺序返回是数据库引擎的事情,数据库引擎只保证关系结果集的正确,不保证顺序。
0
整俩硬菜
整俩硬菜

引用来自“魔力猫”的答案

除非你指定结果集的排序,不然SQL以什么顺序返回是数据库引擎的事情,数据库引擎只保证关系结果集的正确,不保证顺序。
但是我这里确实是传入的参数顺序和查询返回的顺序不同啊!
0
kext
kext
List拿出来之后再sort一下不行吗?
0
魔力猫
魔力猫

没人规定数据库引擎要按照你传入参数的顺序查询呀。而且很多时候顺序增长的主键其实和数据库物理存放情况是基本对应的。无论是索引还是全表,自然最容易按照顺序增长的主键顺序出现,所以很多时候我们看到的结果集都好像用主键自动排序似的,但是这不是绝对的,只要没有order关键字,那么出现什么样的排序数据库引擎都没错。

如果有人写个专门从数据表结尾往前查,那么你就可能看到总是一个主键顺序反着的结果集。

0
魔力猫
魔力猫
数据库的SQL引擎其实是有非常多的优化的,最后执行的SQL可能和你写入的SQL虽然最后的结果集一致,但是优化后你可能根本认不出来。比如把in优化成exists或者反过来,或者把in改成union all,反正结果集一致,数据库引擎认为怎么快怎么优化。
0
suxg123
suxg123
Set set = new TreeSet(list);用这个
0
huan
huan

按照传入的id排序,这么做有意义么?如过一定要这么做,最简单的方法是查出结果集后在应用中再排序

返回顶部
顶部