sql中top,order by共存出现多查询的问题

转自百度空间,原贴链接 http://hi.baidu.com/sophieand1/blog/item/bbd2421b60e00efcae51335f.html

前段时间做的网站,当时首页显示9个产品,当时没有用错乱排序之时按照id倒序来排的,后来客户想自己操作首页推荐的9个产品的位置,当然想到的就是错乱排序,于是把之前的:
select top 9 * from T_Product where P_TuiJian = true order by P_ID Desc
改写成了:
select top 9 * from T_Product where P_TuiJian =true order by IOrder
[其中IOrder为排序号,整形不连续,P_ID为主键自动增加]
改写好之后于数刷新下页面..咦,奇怪的问题出现了..怎么明明是top 9 怎么首页却显示出10个产品出来了...百思不得其解,于是把sql单独拿出来放到我sqlhelper里面分析下..郁闷的是,在sqlhelper里面查询出来的结果却又是9条,郁闷至极...接下来也试过把9改成8(无效),把IOder改成P_ID,或者把order by去掉(有效)...还是没有达到目的,不得不求助于baidu哥,几经周折,找到了想要的:
原因:首先top与order by共存的时候.order by优先级高,也就是先执行排序然后再top
       其次假如order by后面的字段如果有重复值的话...则会把这些重复的记录当作一条记录看待,所以查询出来的记录总是比想要的多
解决方法:再order by之后再加个条件,最好是id(主键)...
完毕,收工!!!

你可能感兴趣的:(order by)