1.SELECT * ­2.  FROM (Select ROWNUM AS ROWNO, T.* ­3.           from k_task T ­4.          where Flight_date between to_date('20060501', 'yyyymmdd') and ­5.                to_date('20060731', 'yyyymmdd') ­6.            AND ROWNUM <= 20) TABLE_ALIAS ­7.WHERE TABLE_ALIAS.ROWNO >= 10; ­
为什么第2行 rownum要用别名rowno?
第3行 k_task 也要用别名 T?
第6行也要用别名TABLE_ALIAS ?为什么下面这样写不行:select * from (select * from work_task where rownum<=10) 
where rownum>5

解决方案 »

  1.   

    rownum是一个伪列,是一条数据产生一个编号,你这个语句
    select * from (select * from work_task where rownum<=10) 
    where rownum>5
    直接对前面的结果集取rownum>5是取不到的。
      

  2.   

    为什么第2行 rownum要用别名rowno? 
    第3行 k_task 也要用别名 T? 
    第6行也要用别名TABLE_ALIAS ?----------------
    1、rownum要用别名rowno,是你子查询中取了前20条数据,产生了一个编号,在外面的条件中用rowno>=10来限定,(这时的rowno是在子查询中已经产生了),所以会过滤出10--20的记录。
    2、k_task 也要用别名 T是为了引用方便,简单,可以不用别名。
    3、这是对你的子查询起一个别名,也是为了以后引用方便,如果单独对这个子查询操作,也可以不用