`
lippeng
  • 浏览: 450776 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Sybase分页查询

 
阅读更多

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的条件,来完成分页查询。 

 

虽然麻烦点,也算是一种解决方案吧!

 

暂时还没想到更好的方案,谁有的话,告诉我呀。

 

 

 

 

 

1
0
分享到:
评论
2 楼 li5220008 2014-06-23  
非常感谢!我们项目组借鉴了你的思想,实现了!
1 楼 louishunt 2013-04-12  
领教了!!!

相关推荐

    sybase分页代码使用jdbc分页速度快适合大数据

    jdbc分页。速度快。适合大数据。100W条级别。首次翻页大概5秒(根据电脑速度而定)以后翻页瞬间完成。要求id整型。有排序还没测试过。使用java代码实现。使用到线程和缓存。

    sybase 实现分页的存储过程

    在sybase中实现分页技术的存储过程 procedures

    分页的sql总结

    这是一个分页的sql的总结,方法简单一看就懂

    sybase分页存储过程(代码)

    sybase分页存储过程(代码),分页存储过程代码,实现sybase数据库分页查询。

    sybase分页优化带排序

    sybase分页优化带排序 http://blog.csdn.net/damenggege123/article/details/8930775

    sybase通用分页模块

    NULL 博文链接:https://wq-pro.iteye.com/blog/1729771

    BluePage通用分页类助开发者提高开发效率1

    1 分页要与SQL无关。为什么分页必须与SQL无关呢?很显然,有一定开发经验的朋友,至少都在使用数据库代理类。我们不应该在分页类中global或传递数据库类,至于直接把数据库连接放进去,那更要不得。另外请看第5点。 ...

    sybase海量数据分页瞬间完成2.0

    在前一版本分页基础上修改BUG,连接没释放,小数据量查询慢,缓存没清除。重复缓存。

    asp.net利用存储过程分页代码

    asp.net利用存储过程分页代码,代码很详细,有建库脚本和页面的调用。

    分页条优化插件 for blog.rar

    启用该插件后,分页条将采用更为合理的格式显示,读取系统模板,不用重建,即刻生效。 更新记录: [08.12.23] 修正了当前页数为第1页或最后页时上下页导航出错问题 [08.09.12] 修正当前页数大于显示页数后无法...

    sybase sqlanywhere5.0

    经典的SYBASE,中石油很多相关的软件都使用它。

    独立的跨数据库的分页

    独立的跨数据库的java分页:可连接oracle,sybase,sqlserver,mysql! 项目涉及分页只需拷贝简单修改即可! 有相应的ppt讲解

    JSF中文文档与SYBASE中文教程文档.zip

    jsf中文文档与sybase中文文档,jsf与sybase现在都已经比较小众了,希望用到的朋友能够方便的开发。 其中jsf包含组件介绍以及使用,sybase中有一些使用技巧,比如分页以及性能测试调优。

    VBC#.Net实体代码生成工具

    目前直接支持Oracle、SqlServer、Sybase、DB2、Access、MySQL、SQLite、PostgreSQL、DM(达梦)、OleDb和Custom(自定义)类型的数据库、PowerDesigner文件,同时也支持Informix、Firebird、MaxDB、Odbc等,可用于各种...

    VB/C#.Net实体代码生成工具(EntitysCodeGenerate)_4.3

    目前直接支持Oracle、SqlServer、Sybase、DB2、Access、MySQL、SQLite、PostgreSQL、DM(达梦)、OleDb和Custom(自定义)类型的数据库、PowerDesigner文件,同时也支持Informix、Firebird、MaxDB、Odbc等,可用于各种...

    sqltoy-orm框架系统-其他

    4、最强大的分页查询:很多人第一次了解到何为快速分页、分页优化这种极为巧妙的处理,还有在count语句上的极度优化。 5、跨数据库函数方言替换,如:isnull/ifnull/nvl、substr/substring 等不同数据库。 sqltoy-...

    JTurboExplorer:MySQL,Oracle,Sybase等数据库浏览器。 来源制造商JSF。-开源

    它是帮助程序员检查数据库并如此轻松地生成代码的工具。... 从表生成存储过程以进行插入,更新,删除,查询和分页。 从表中生成代码JSF2.0(Action)和PrimeFaces(xhtml),Struts 1.3的代码,等等。

    SocanCode7.4.1

    支持Access,SqlServer,MySql,Oracle,SQLite,Sybase,DB2,PostgreSql连接 全模板化的代码生成器,轻松修改即可实现自定义各种编程语言模板、支持代码批量输出 内置一套强大的C#三层架构模板,此模板支持生成简单三层及...

    数据库底层操作与配置V2.1

    该版本相对于2.0增加了自编译数据表字段,不再需要使用CodeSmith工具,真正实现代码的自动化,同进修正了在分页查询出现的问题 本工具附有详细的使用说明,有助于用户更好地使用本工具 如有问题请联系...

    vb/c#.net实体代码生成工具(entityscodegenerate

    目前直接支持oracle、sqlserver、sybase、db2、access、mysql、sqlite、postgresql、dm(达梦)、oledb和custom(自定义)类型的数据库、powerdesigner文件,同时也支持informix、firebird、maxdb、odbc等,可用于各种...

Global site tag (gtag.js) - Google Analytics