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>? 这种写法是好的
oracle分页问题,rownum<?这个条件可以提前吗?
答案:2 悬赏:80 手机版
解决时间 2021-02-02 06:11
- 提问者网友:美人性情
- 2021-02-01 08:43
最佳答案
- 五星知识达人网友:毛毛
- 2021-02-01 10:11
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相当于所有结果集先按行号排序,在根据行号获取大于多少行号和小于多少行号的区间记录集
全部回答
- 1楼网友:从此江山别
- 2021-02-01 10:51
rownum是oracle预处理字段,默认标序是1,只有记录集已经满足条件后才会进行后续编号。由于第一条记录rownum默认是1,而你的条件是rownum>=6 对第一条记录比较它的rownum肯定不大于6 所以不满足条件 oracle舍弃第一条记录将数据库第二条记录标序为1再进行比较 肯定都不满足rownum>=6 这样循环也就是说由于没有记录满足rownum>=6所以记录一直被舍弃,rownum一直是1 。
排序方法:
select * from (
select a1.*, rownum rwn from emp a1 where rownum <=10
) where rwn >= 6;
或者
select * from (
select qx.*,row_number() over(order by qx.empno) rwn from emp qx
) where rwn between 6 and 10
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯