Sybase的分页,可以说,不是一般的难做。因为这数据库本身,支持太差。搞不懂为什么一个商业数据库,这么基本的功能,都弄的这么难做。
想起一段话:做简单的事情要简单,复杂的事情要能做。
分页查询,应该归入简单的事情吧!
在网上找到的,关于分页查询的SQL,看上去都挺有道理的,放到Sybase上一跑,就发现,几乎全部不能运行,直接给你报错。
我认为问题主要集中在Sybase对子查询的支持上。Sybase对子查询的支持,非常非常的有限。所以,先说说Sybase对子查询的支持吧!
网上有一篇博客,写的不错,说的是Sybase支持与不支持的子查询:
SYBASE数据库支持与不支持的子查询语句的归纳总结
当我看到支持 >, <, in, not in 的子查询时,有点狂喜,认为一句SQL能搞定分页的。于是,我欣喜的写下以下2种方案:
方案一(不能用的哦):
select top <pageSize> *
from <table>
where <id> > (select max(<id>)
from (select top (<pageSize> * (<pageNum> - 1))
from <table>
order by <id>)
order by <id>)
order by <id>
方案二(同样不行的哦):
select top <pageSize> *
from <table>
where <id> not in (select top (<pageSize> * (<pageNum> - 1))
from <table>
order by <id>)
order by <id>
想归想,写的时候,就发现 方案一 很不靠谱。在子查询里面 再用 子查询,并且 还用在from里面,不靠谱,很不靠谱。一运行,果然不能跑。
方案二,看上去挺好,只有一个子查询,并且是Sybase支持的类型,是真支持的。但是(不好意思,还是转折了),很遗憾的告诉你,也是不能跑的。
这个方案有2个问题:
1、子查询中,用了top。Sybase的子查询中,不能用top的,测了才知道;
2、子查询中,用了order by。Sybase的子查询中,是不能用order by的,测了才知道。
现在看来,除了写存储过程外,真的没办法了。
但是,不愿意用存储过程。
只能分多条SQL来完成这一件事。
于是,就出现了以下方案:
方案三(可以用):
select top (<pageSize> * (<pageNum> - 1))
from <table>
order by <id>
从上面SQL中取出 max(id)
select top <pageSize> *
from <table>
where <id> > max(id)
order by <id>
这样分2个SQL,在数据库之外,找出前N-1页最大的ID,作为第2个SQL的条件,来完成分页查询。
虽然麻烦点,也算是一种解决方案吧!
暂时还没想到更好的方案,谁有的话,告诉我呀。
分享到:
相关推荐
jdbc分页。速度快。适合大数据。100W条级别。首次翻页大概5秒(根据电脑速度而定)以后翻页瞬间完成。要求id整型。有排序还没测试过。使用java代码实现。使用到线程和缓存。
在sybase中实现分页技术的存储过程 procedures
这是一个分页的sql的总结,方法简单一看就懂
sybase分页存储过程(代码),分页存储过程代码,实现sybase数据库分页查询。
sybase分页优化带排序 http://blog.csdn.net/damenggege123/article/details/8930775
NULL 博文链接:https://wq-pro.iteye.com/blog/1729771
1 分页要与SQL无关。为什么分页必须与SQL无关呢?很显然,有一定开发经验的朋友,至少都在使用数据库代理类。我们不应该在分页类中global或传递数据库类,至于直接把数据库连接放进去,那更要不得。另外请看第5点。 ...
在前一版本分页基础上修改BUG,连接没释放,小数据量查询慢,缓存没清除。重复缓存。
asp.net利用存储过程分页代码,代码很详细,有建库脚本和页面的调用。
启用该插件后,分页条将采用更为合理的格式显示,读取系统模板,不用重建,即刻生效。 更新记录: [08.12.23] 修正了当前页数为第1页或最后页时上下页导航出错问题 [08.09.12] 修正当前页数大于显示页数后无法...
经典的SYBASE,中石油很多相关的软件都使用它。
独立的跨数据库的java分页:可连接oracle,sybase,sqlserver,mysql! 项目涉及分页只需拷贝简单修改即可! 有相应的ppt讲解
jsf中文文档与sybase中文文档,jsf与sybase现在都已经比较小众了,希望用到的朋友能够方便的开发。 其中jsf包含组件介绍以及使用,sybase中有一些使用技巧,比如分页以及性能测试调优。
目前直接支持Oracle、SqlServer、Sybase、DB2、Access、MySQL、SQLite、PostgreSQL、DM(达梦)、OleDb和Custom(自定义)类型的数据库、PowerDesigner文件,同时也支持Informix、Firebird、MaxDB、Odbc等,可用于各种...
目前直接支持Oracle、SqlServer、Sybase、DB2、Access、MySQL、SQLite、PostgreSQL、DM(达梦)、OleDb和Custom(自定义)类型的数据库、PowerDesigner文件,同时也支持Informix、Firebird、MaxDB、Odbc等,可用于各种...
4、最强大的分页查询:很多人第一次了解到何为快速分页、分页优化这种极为巧妙的处理,还有在count语句上的极度优化。 5、跨数据库函数方言替换,如:isnull/ifnull/nvl、substr/substring 等不同数据库。 sqltoy-...
它是帮助程序员检查数据库并如此轻松地生成代码的工具。... 从表生成存储过程以进行插入,更新,删除,查询和分页。 从表中生成代码JSF2.0(Action)和PrimeFaces(xhtml),Struts 1.3的代码,等等。
支持Access,SqlServer,MySql,Oracle,SQLite,Sybase,DB2,PostgreSql连接 全模板化的代码生成器,轻松修改即可实现自定义各种编程语言模板、支持代码批量输出 内置一套强大的C#三层架构模板,此模板支持生成简单三层及...
该版本相对于2.0增加了自编译数据表字段,不再需要使用CodeSmith工具,真正实现代码的自动化,同进修正了在分页查询出现的问题 本工具附有详细的使用说明,有助于用户更好地使用本工具 如有问题请联系...
目前直接支持oracle、sqlserver、sybase、db2、access、mysql、sqlite、postgresql、dm(达梦)、oledb和custom(自定义)类型的数据库、powerdesigner文件,同时也支持informix、firebird、maxdb、odbc等,可用于各种...