`
907182878
  • 浏览: 7716 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

oracle 排序分页混乱

阅读更多

今天有个需求用oracle排序分页:

sql如下:

 

select *
  from (select id, member_id, company_name, rownum rn
          from (select t.id, t.member_id, t.company_name
                  from table1 t, table2 d
                 where t.id = d.opp_id(+)
                   and product_id_prefer = 1
                   and t.sales_id = 'sunny.zhaoy'
                 order by t.maturity asc, d.memo)
         where rownum <= #endrow#) m
 where m.rn >= #rowid#

 

这个sql是正确的,在开发库用了下,没有问题、、但是提交到测试库就有问题了,第三页和第四页,第五页第六页 怎么查询都是一样的结果。

比如我一页50条,那么下面两个sql查询的结果居然一模一样(总共600条):


 

select *
  from (select id, member_id, company_name, rownum rn
          from (select t.id, t.member_id, t.company_name
                  from table1 t, table2 d
                 where t.id = d.opp_id(+)
                   and product_id_prefer = 1
                   and t.sales_id = 'sunny.zhaoy'
                 order by t.maturity asc, d.memo)
         where rownum <= 150) m
 where m.rn >= 101
 
 ======================================================
 
 select *
  from (select id, member_id, company_name, rownum rn
          from (select t.id, t.member_id, t.company_name
                  from table1 t, table2 d
                 where t.id = d.opp_id(+)
                   and product_id_prefer = 1
                   and t.sales_id = 'sunny.zhaoy'
                 order by t.maturity asc, d.memo)
         where rownum <= 200) m
 where m.rn >= 151

 

 


 

 

基本上应该没啥问题,问题出现在什么地方呢?

首先这跟oracle无关, 是典型的order by字段值不唯一造成分页记录混乱。

也就是说 我用 t.maturity asc, d.memo 排序,但是这两个字段的值可能都是相同的,或者很多都是不唯一的。。这时候就会出现这个问题了。

怎么解决呢?

其实很简单,只要在排序的时候加一个值唯一的字段的就可以了。最好是id

 

改成如下就ok了:

 

select *
  from (select id, member_id, company_name, rownum rn
          from (select t.id, t.member_id, t.company_name
                  from table1 t, table2 d
                 where t.id = d.opp_id(+)
                   and product_id_prefer = 1
                   and t.sales_id = 'sunny.zhaoy'
                 order by t.maturity asc, d.memo,t.id)
         where rownum <= 150) m
 where m.rn >= 101
 
 ======================================================
 
 select *
  from (select id, member_id, company_name, rownum rn
          from (select t.id, t.member_id, t.company_name
                  from table1 t, table2 d
                 where t.id = d.opp_id(+)
                   and product_id_prefer = 1
                   and t.sales_id = 'sunny.zhaoy'
                 order by t.maturity asc, d.memo,t.id)
         where rownum <= 200) m
 where m.rn >= 151

分享到:
评论

相关推荐

    如何解决Oracle分页查询中排序与效率问题

    Oracle 分页查询优化与排序解决方案 本文主要解决 Oracle 分页查询中排序与效率问题,通过实践和分析,提供了两种解决方案,并对比了两种方法的优缺点。 知识点 1: Oracle 分页查询的基本概念 Oracle 分页查询是...

    解决Oracle分页查询中排序与效率问题

    ### 解决Oracle分页查询中排序与效率问题 在Oracle数据库中进行分页查询时,经常会出现性能瓶颈,尤其是在处理大数据量的情况下。本篇文章将详细探讨如何优化Oracle分页查询中的排序与效率问题。 #### 一、理解...

    Oracle分页(limit方式的运用)

    ### Oracle分页(LIMIT方式的运用) 在数据库查询操作中,分页是非常常见的需求之一,尤其是在数据量较大的情况下,为了提高用户体验以及减轻服务器压力,我们需要将数据分成若干个页面进行展示。Oracle数据库作为...

    Oracle的SQL分页实践

    在Oracle数据库中,SQL分页是一种非常常见的查询技术,它允许我们从大量数据中按需获取一部分结果,而不是一次性加载所有记录。这对于提高用户体验和优化系统性能至关重要,尤其是在处理大数据量的Web应用中。本实践...

    Oracle的分页查询语句 Oracle分页的存储过程

    Oracle数据库在处理大数据量查询时,分页查询是一种常见的优化策略,目的是限制返回结果集的大小,加快查询速度,提供更好的用户体验。本文将详细探讨Oracle的分页查询语句及其存储过程。 首先,Oracle的分页查询...

    kettle oracle循环分页迁移数据的完整例子,生成txt后FTP上传到远程服务器

    【标题】"kettle oracle循环分页迁移数据的完整例子,生成txt后FTP上传到远程服务器"揭示了几个关键的IT知识点,主要包括: 1. **Kettle(Pentaho Data Integration,PDI)**:Kettle是一款开源的数据集成工具,...

    SSH+ORACLE好用分页

    在这个场景下,"SSH+ORACLE好用分页"意味着我们将SSH框架与Oracle数据库结合,实现了高效的数据分页功能。 数据分页是Web应用中常见的需求,特别是在处理大量数据时,分页可以提高用户体验,避免一次性加载过多数据...

    oracle的分页查询

    本文将讲解 Oracle 中的分页查询,包括使用 ROWNUM 伪列和 ORDER BY 子句对查询结果进行排序和分页。 一、使用 ROWNUM 伪列实现分页查询 在 Oracle 中,ROWNUP 伪列是一个特殊的列,可以用来实现分页查询。例如,...

    oracle sql分页语句

    Oracle SQL分页语句是数据库查询中的一个重要概念,它允许我们从海量数据中按需获取特定范围的结果,比如第一页、第二页等。在Oracle数据库系统中,实现分页查询通常使用ROWNUM伪列或者结合RANK()、DENSE_RANK()、...

    oracle 分页完整代码

    在Oracle数据库中,分页查询是一项非常常见的操作,特别是在处理大量数据时,为了提高用户体验,我们需要将结果集分块加载,这就是所谓的分页。在这个Java和Oracle结合的分页实现中,我们将探讨如何通过Java后端配合...

    Oracle&JSP分页和Oracle分页

    总结来说,Oracle和JSP结合实现分页涉及以下几个步骤:在Oracle中构造分页查询,使用JDBC在Servlet中执行查询,然后在JSP页面中展示数据。理解并熟练掌握这些步骤对于开发高效、用户友好的数据驱动网站至关重要。在...

    java web与Oracle数据的分页功能

    在Java Web开发中,与Oracle数据库进行交互时,分页功能是常见的需求,尤其是在处理大量数据时,为了提高用户体验和加载速度,分批次地显示数据是必不可少的。本项目提供的源代码正是针对这一需求,提供了在Java Web...

    Oracle真分页。源码

    Oracle数据库在处理大数据量时,分页查询是一个重要的性能优化手段。传统的ROWNUM分页方式在某些场景下可能无法满足需求,特别是在数据量过大或需要跨多行进行排序时,会出现效率低下甚至错误的结果。因此,“Oracle...

    Oracle 3种分页SQL方法比较

    本文将详细探讨三种常用的Oracle分页SQL方法:ROWNUM、ROWNUM结合子查询以及新引入的Oracle 12c的FETCH NEXT WITH OFFSET语法。这三种方法各有优缺点,适用于不同的场景。 1. ROWNUM方法: ROWNUM是Oracle中最基础...

    oracle数据库分页代码

    关于oracle 的分页、翻页的java源代码,结合JDBC连接数据库实现,比较基础的JDBC结合swing图形框架实现,适合Java初学者使用

    ssh+oracle分页

    在“ssh+oracle分页”这个主题中,我们将深入探讨如何利用这三个框架与Oracle数据库进行集成,并实现数据的分页显示。 1. **Struts框架**:Struts是一个基于MVC(Model-View-Controller)设计模式的Java Web框架。...

    带排序的oracle分页存储过程

    ### 带排序的Oracle分页存储过程 在开发Web应用程序的过程中,分页是一个非常常见的需求。为了提高系统的性能及可维护性,采用存储过程来实现分页逻辑是一种较为推荐的做法。下面将详细介绍如何利用Oracle数据库中...

    SSH+ORACLE通用分页

    总的来说,"SSH+Oracle通用分页"是Java Web开发中常见的需求,它涉及到SSH框架的集成使用和Oracle数据库的高效查询策略。理解并熟练掌握这些知识,对于开发高性能、用户体验良好的Web应用至关重要。在实际项目中,还...

    oracle分页 排序

    ### Oracle分页与排序知识点详解 #### 一、Oracle分页查询原理及应用 在Oracle数据库中,实现分页查询通常依赖于`ROWNUM`伪列。`ROWNUM`为每一行分配一个唯一的行号,从1开始递增。利用这一特性,我们可以有效地...

    Oracle 分页存储过程

    在Oracle数据库中,分页查询是一项...总的来说,通过精心设计的存储过程,我们可以实现高效的多条件Oracle分页查询,同时确保查询性能不受数据量的影响。在实际应用中,应根据具体情况进行调整和优化,以达到最佳效果。

Global site tag (gtag.js) - Google Analytics