浏览 10767 次
锁定老帖子 主题:Oracle分页SQL
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (5)
|
|
---|---|
作者 | 正文 |
发表时间:2009-05-08
最后修改:2009-05-08
排序分页中如果要排序的字段有很多相同值的情况下只使用2层嵌套查询则可能出现数据混乱,所以只能采用三层嵌套查询。 排序分页使用下面的嵌套语句: select * from (select rownum as r,t.* from(select tableName.* from tableName order by tableColum DESC) t where rownum<=endPos) where r>startPos 目前在hibernate3.1及以下的版本中好像没有采用这种三层嵌套查询(3.2我没试过)所以要在hibernate中实现排序分页只有自己写SQL语句了。 看来我们想完全依赖hibernate来实现一些常规的查询还是会有一点的困难。 而且三层嵌套的语句在阅读上并不直观。 相对说MYSQL的LIMIT用起来就比较舒服了,很简洁。 不知道这次ORACLE收购SUN会不会把MYSQL中的LIMIT给加入到自己的产品中去。 让我们拭目以待吧 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-05-08
非常不美观、、
|
|
返回顶楼 | |
发表时间:2009-05-08
select * from (
select rownum as r,t.* from( select tableName.* from tableName order by tableColum DESC ) t where rownum<=endPos) where r>startPos 我只想说一句 排序放错地方了 |
|
返回顶楼 | |
发表时间:2009-05-15
SELECT x.* from (
SELECT z.*,rownum numbers from(select * from tableName order by tableColum ) z where rownum<maxNum) x where x.numbers>minNum |
|
返回顶楼 | |
发表时间:2009-05-16
Hibernate3里早就有了..
自己看看Dialect.. |
|
返回顶楼 | |
发表时间:2009-05-17
是啊,Dialect中有各种数据库截取数据处理过程
|
|
返回顶楼 | |
发表时间:2009-07-02
jacklondon 写道 SQL standard 2003 新带来的 SQL 窗口函数(Window function) ROW_NUMBER() OVER () , 数据库 SQL server 2005/DB2/Oracle 都支持,Oracle 与标准略为有点差别。 Mysql/PostgreSQL 则不支持 ROW_NUMBER()。
我觉得还是 limit 最好用。只是不知道为什么其他数据库厂商都不用,也不知道 SQL 标准委员会为什么不用,不知道有没有中国人在SQL 标准委员中。 我为postgresql 捐献过代码, 也在postgresql 全球开发组中混过几天, 大部分数据库不支持limit x offset y的原因是存储设计的时候没有考虑到这个问题。而且从海量存储的角度上来说, 在当时(上世纪70年代末) 的条件和技术,也没法实现这个功能。 postgresql , mysql 起步都比较晚, 而且postgresql 也起源于一个学院内部的实验项目,所以在其中包含一些超前的设计也是在情理之中的。 |
|
返回顶楼 | |