rownum的问题
例如表 apw_ad 有以下数据
列名 A1 A2 ----(A1是number)
1 aa
2 bb
3 cc
4 dd
5 ee
6 ff
7 gg
我用
select * from apw_ad where rownum <6 order by createtime desc;
或
select * from apw_ad where rownum <6 order by createtime ;
来查询,每次出现的结果都是4条数据和 7 gg,
7 gg 每次都出现,这是为什么?
按理说, 他应该不出现的,这是怎么回事,怎么解决?
------解决方案--------------------select * from (select * from apw_ad order by createtime desc) where rownum <6 ;
------解决方案-------------------- Oracle中的rownum的是在取数据的时候产生的序号,所以想对指定排序的数据去指定的rowmun行数据就必须注意了。
SQL> select rownum ,id,name from student order by name;
ROWNUM ID NAME
---------- ------ ---------------------------------------------------
3 200003 李三
2 200002 王二
1 200001 张一
4 200004 赵四
可以看出,rownum并不是按照name列来生成的序号。系统是按照记录插入时的顺序给记录排的号,rowid也是顺序分配的。为了解决这个问题,必须使用子查询
SQL> select rownum ,id,name from (select * from student order by name);
ROWNUM ID NAME
---------- ------ ---------------------------------------------------
1 200003 李三
2 200002 王二
3 200001 张一
4 200004 赵四
这样就成了按name排序,并且用rownum标出正确序号(有小到大);