要那么复杂吗?select * from (SELECT * FROM NEWS where isdelete=0 order by news_time desc) where rownum<=10

解决方案 »

  1.   

    原句:
    SELECT *
      FROM (SELECT   *
                FROM news
            ORDER BY news_time DESC)
     WHERE ROWID IN (SELECT ROWID
                       FROM (SELECT   *
                                 FROM news
                             ORDER BY news_time DESC)
                      WHERE ROWNUM <= 10 AND isdelete = 0)
       AND ROWID NOT IN (SELECT ROWID
                           FROM (SELECT   *
                                     FROM news
                                 ORDER BY news_time DESC)
                          WHERE ROWNUM <= 0 AND isdelete = 0)把第一个order by 放出来不就行了!SELECT   *
        FROM (SELECT *
                FROM news)
       WHERE ROWID IN (SELECT ROWID
                         FROM (SELECT   *
                                   FROM news
                               ORDER BY news_time DESC)
                        WHERE ROWNUM <= 10 AND isdelete = 0)
         AND ROWID NOT IN (SELECT ROWID
                             FROM (SELECT   *
                                       FROM news
                                   ORDER BY news_time DESC)
                            WHERE ROWNUM <= 0 AND isdelete = 0)
    ORDER BY news_time DESC
      

  2.   

    转帖一个回复:我们经常要访问数据集的某一个中间部分,例如第10到第20条记录,Oracle中有一个很好语句来实现,那就是with。以下是使用的例子: 
    with partdata as (select rownum rowno,t.* from table1 t where t.id>200407160000)
    select * from partdata where rowno between 10 and 20
    当然还有别的方法,但我目前测试这种方法的速度最快。以上代码在Oracle 9i中测试通过
    8i:
    select * from (select t.*,rownum id from larget1 t)
       where id between 21 and 30
      

  3.   

    请注意一点就可以:rownum是随记录集生成的时候而生成的,是先得到rownum,然后才排序的,这也是你得不到正确结果的原因所在而且你的SQL也太复杂了,没有必要这样写
      

  4.   

    樓主的語句太復雜了,另外要特別注意:rowid是Oracle用來識別數據行的,它是在數據被插入的時候就決定了的,不是在數據查詢的時候出現的,而rownum則是在數據查詢的時候出現的,而且它是按搜出來的順序來確定大小的,這和你的查詢語句在執行時,Oracle優化器所選擇的執行路徑有關的,比如,如果在執行的時候優化器選用了索引,則rownum的大小是按索引順序從小到大設置的,如果沒有用到索引,則它是直接按掃描時的順序從小到大設置的,因為上述原因,所以就出現了樓主所看到的結果.
      

  5.   

    簡單有效的語句使用 hevin(没有什么是不可能的) 的就可以了啊!