案例:
今天做了个分页,起先以为 只要在区间就可以了,比如:
select * from tbl where rownum between 3 and 100;
可是不管如何查询出来都没有数据
原因:
由于对rownum的认识肤浅
分析:
这种写法之所以行不通,是因为 ROWNUM 列只有在记录被取出或过滤时才会应用到记录上。
第一行在被取出时会被抛出,因为它的 ROWNUM 是1。然后,下一行被取出;它也会被抛出,因为它是新的“1”,以此类推,直到所有的行都被使用。这个查询不会返回任何记录。解决方法是在看到3到100之间的记录时必须先取出1到30行的记录
所以 如果 select * from tbl where rownum between 1 and 100; 是正确, 因为刚好开始位置是从1 开始
解决:
select t.* from (slect rownum rowno,...... where .....and rownum <=100) t where t.rowno>=3
即封装两层,先过滤小于100 的,然后在把rownum伪列显示为真实列,在做条件查询