oracle分页问题,rownum<?这个条件可以提前吗?
selectxx.*from(x.*,rownumnoform(...)xwhereno<?)xxwherexx.no>?//这个写法分页数据会有重复,请问下是什么原因s...
select xx.* from ( x.*,rownum no form (...) x where no<?) xx where xx.no>? //这个写法分页数据会有重复,请问下是什么原因
select xx.* from (x.*,rownum no from(...)x ) xx where xx.no<? and xx.no>? 这种写法是好的 展开
select xx.* from (x.*,rownum no from(...)x ) xx where xx.no<? and xx.no>? 这种写法是好的 展开
1个回答
展开全部
x.*,rownum no form (...) x where no<?
这里rownum是结果集的序号,也就是no<多少 就取多少数据。永远取不到区间记录集。
(x.*,rownum no from(...)x ) xx where xx.no<? 这里再用xx.no的时候,rownum相当于所有结果集先按行号排序,在根据行号获取大于多少行号和小于多少行号的区间记录集
这里rownum是结果集的序号,也就是no<多少 就取多少数据。永远取不到区间记录集。
(x.*,rownum no from(...)x ) xx where xx.no<? 这里再用xx.no的时候,rownum相当于所有结果集先按行号排序,在根据行号获取大于多少行号和小于多少行号的区间记录集
追问
x.*,rownum no form (...) x where no<? 这个的no是按结果接标记序号,取小于多少条的数据
(x.*,rownum no from(...)x ) xx where xx.no<? 这个不也是按结果集标记序号,他们标记的序号都应该一样的吧?只不过上面那种只标记到上限就停止了
追答
第一句不一样,比如有1000条数据,你要去200到300的记录,第一句是取前200的记录,大于200是取不到的,因为结果集还没生成,rownum没有大于200
第二句,已经生成了结果集,这时候rownum是从1排到1000的,这时候可以取到200到300
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询