发布网友
共4个回答
热心网友
其实,就是执行顺序的问题,在select rownum r, ename from emp where r < 10;中先执行where 语句,接着才执行select语句中的别名即 rownum r ,所以是错的。
热心网友
第一句中两个rownum其实不是一回事了. where条件里面的rownum是为 (select p.*,rownum from prod.proct_offer p) 这个语句产生的结果集产生的伪列. 而rownum=后面除非是1 ,是大于1的数都不会产生任何结果集. (举个例子,假设判断rownum=2,先判断第一列rownum分配1,结果不符合条件,接着第二条,还是rownum给分配1,还是不符合条件,所以这样下去所有的记录都是不符合条件的). 一般的用法是rownum< 一个数值
第二句中两个id指的是同一回事,所以能查出来.
记住rownum是伪列,不是实际存在的列就可以了.
热心网友
1.select rownum r, ename from emp where r < 10;
改成
select * from (select rownum r, ename from emp ) where r < 10;
或者
select rownum,ename from emp where rownum<10;
rownum 本身就是伪劣,不存在的,只有你在select 以后才会分配
2.
rownum 只能使用 >=1 or>1 因为rownum 每次分配都是从1开始分配的,所有你使用>10,是会报错的
你要查询一个 10-20的范围的时候
select * from (select rownum r, ename from emp ) where r between 10 and 20追问1.select rownum r, ename from emp
where r < 10;
2.select rownum r, ename from emp
where rownum < 10;
这两句话只是一个用r,一个用rownum筛选,为什么用r就不行
热心网友
学习占位