如题,为了彻底解决分页问题。没办法只好叨扰大家啦~已经知道的:
access 、sqlserver是select top N * 和order by 来解决mysql 是:select * from tablename limit m,(n-m) 其他的我就不知道了,请各位前辈赐教~db2,informix,oralce,sybase等等数据库越多越好啊~~一定要是高效的sql语句哦~,比如oracle的select rownum,*  from tablename 这句就不行,如果有十万条记录,那么还得每条记录都给她分配一个rownum? 疯了!!~也不要用not in关键字.本来想放200分先,结果我放不了那么多,咳,反正大家帮忙拉,不够另开帖给分~~~

解决方案 »

  1.   

    select top n-m * from (select top n from table_name order by id ) order by id descid代表主键,整形,以此类推。不知道这个效率如何。
      

  2.   

    你这是access,和sqlserver的,这个速度还可以
      

  3.   

    这个太容易啦!哥们你去看看hibernate的实现就好了!有多少个方言就有多少个这样的语句!
    里面的setFirstResult()和setMaxResult() 然后输入sql语句就能看到如何写了!
      

  4.   

    oracle的分页语句就是利用rownum来分页的!我忘记了,你可以去网上搜索!最好是看hibernate!他里面的Query
      

  5.   

    用SQL语句分页倒是没有用过。只有学的份了
      

  6.   

    oracle语句
    抽取从N行到M行的记录,如从20行到30行的记录
    select * from (select rownum id,t.* from table where ……
    and rownum <= 30) where id > 20;
      

  7.   

    select top n-m * from (select top n from table_name order by id ) order by id desc
    这句查询可能有点问题,我觉得应该是
    select top n-m * from table_name where id >(select max(id) from (select top m from table_name order by id ) as t) order by id 
      

  8.   

    1. ORACLE 
    SELECT * FROM TABLE1 WHERE ROWNUM<=N 2. INFORMIX 
    SELECT FIRST N * FROM TABLE1 where 1=1 3. DB2 
    SELECT * ROW_NUMBER() OVER(ORDER BY COL1 DESC) AS ROWNUM WHERE ROWNUM<=N 
    或者
    SELECT COLUMN FROM TABLE where 1=1 FETCH FIRST N ROWS ONLY 4. SQL SERVER 
    SELECT TOP N * FROM TABLE1 where 1=1 
    or
    SET ROWCOUNT N SELECT * FROM TABLE1 where 1=1 SET ROWCOUNT N15. SYBASE 
    SET ROWCOUNT N SELECT * FROM TABLE1 where 1=1 SET ROWCOUNT N16. MYSQL 
    SELECT * FROM TABLE1 where 1=1 LIMIT N 7. FOXPRO 
    SELECT * TOP N FROM TABLE ORDER BY COLUMN8. ACCESS 
    SELECT TOP N * FROM TABLE1 where 1=1
      

  9.   

    Oracle中效率最高得是这个
    返回10-20的
    select * from (select rownum r,a.* from yourtable a where rownum <= 20) where r >= 10
      

  10.   

    楼主认为oracle的效率慢?
    我认为不会oracle肯定不会把所有的rownum都算出来,再算外面的查询
    mysql, postgres的limit用起来很方便.SQL server的top *...not in top...真的是垃圾,用起来会死人.不过要是从第1000000000到1000000001条的数据想要效率,咋样都是快不了的。只能从自己建表上下手
      

  11.   

    不过要是从第1000000000到1000000001条的数据想要效率,咋样都是快不了的。只能从自己建表上下手没错,这是一个技术的误区,03年针对做mysql的pagination程序时候,曾经为数据库的30W条记录后的limit性能的几何级攀升而苦恼。但是问题最终的解决只在于产品经理的一句话,“没有用户会翻到这些页去浏览内容”所以我的观点是:所有的翻页程序,只要保持前15页 也就是前1k条记录的性能即可,不要无限扩大你的SQL结果集,因为这个时候你根本无法借助SQL语句来帮你提高性能如果当你的用户需要历史数据的时候,调整你的where子句或者使用历史表来解决总之目的就是:不要出现limit 10000,10010 这种语句  HTH
      

  12.   

    对于oracle的翻页,bluemeteor(挂月||Becoder)正解
      

  13.   

    eureka0891(迷茫中...): 我倒有个办法,顺着找不行,从第1000000000到1000000001条的数据
    我可以倒着找,是不是?
      

  14.   

    zeq258(近朱者赤) : 想请教一下,你那个where 1=1 干什么用的?
      

  15.   

    哈,1=1是便于CLASS方法里添加查询条件的。
      

  16.   

    class方法里?举个例子吧,没见过呢,谢谢啦
      

  17.   

    倒着找还不是一样:
    比如有20000000,你要取中间的一部分where 1=1是为了方便后面再加入新条件时判断是否要加上and ...
      

  18.   

    Oracle中效率最高得是这个
    返回10-20的
    select * from (select rownum r,a.* from yourtable a where rownum <= 20) where r >= 10