关于 oracle 中 rownum between and 查不着数据
首先查询所有的
select emp.*,rownum from emp;
可以查到数据,然后查rownum 1到5的数据
select emp.*,rownum from emp where rownum between 1 and 5;
也能查出数据
但是如果查询2到5的数据就查不到了
select emp.*,rownum from emp where rownum between 2 and 5;
当前这条sql语句执行并没有报错,但是就是查不出数据
原因: rownum是一个序列,是oracle数据库从数据文件或缓冲区中读取数据的顺序,它取得第一条记录则rownum值为1,第二条为2,依次类推。假设你用>、>=、=、between...and...这些条件。由于从缓冲区或数据文件里得到的第一条记录的rownum为1,不满足条件就会接着取下条,它的rownum还是1。又被删除,依次类推,便没有了数据。
简单的说就是:因为第一条的rownum不满足条件删掉了,第二条的ROWNUM又成了1,所以永远没有满足条件的记录。
解决方法:子查询先查出来,然后给rownum起个别名
with temp as (select emp.*,rownum no from emp) select * from temp where no between 2 and 5;
ps:rownum不能以任何基表的名称作为前缀
0条评论
点击登录参与评论