今天有个需求用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 分页查询中排序与效率问题,通过实践和分析,提供了两种解决方案,并对比了两种方法的优缺点。 知识点 1: Oracle 分页查询的基本概念 Oracle 分页查询是...
### 解决Oracle分页查询中排序与效率问题 在Oracle数据库中进行分页查询时,经常会出现性能瓶颈,尤其是在处理大数据量的情况下。本篇文章将详细探讨如何优化Oracle分页查询中的排序与效率问题。 #### 一、理解...
### Oracle分页(LIMIT方式的运用) 在数据库查询操作中,分页是非常常见的需求之一,尤其是在数据量较大的情况下,为了提高用户体验以及减轻服务器压力,我们需要将数据分成若干个页面进行展示。Oracle数据库作为...
在Oracle数据库中,SQL分页是一种非常常见的查询技术,它允许我们从大量数据中按需获取一部分结果,而不是一次性加载所有记录。这对于提高用户体验和优化系统性能至关重要,尤其是在处理大数据量的Web应用中。本实践...
Oracle数据库在处理大数据量查询时,分页查询是一种常见的优化策略,目的是限制返回结果集的大小,加快查询速度,提供更好的用户体验。本文将详细探讨Oracle的分页查询语句及其存储过程。 首先,Oracle的分页查询...
【标题】"kettle oracle循环分页迁移数据的完整例子,生成txt后FTP上传到远程服务器"揭示了几个关键的IT知识点,主要包括: 1. **Kettle(Pentaho Data Integration,PDI)**:Kettle是一款开源的数据集成工具,...
在这个场景下,"SSH+ORACLE好用分页"意味着我们将SSH框架与Oracle数据库结合,实现了高效的数据分页功能。 数据分页是Web应用中常见的需求,特别是在处理大量数据时,分页可以提高用户体验,避免一次性加载过多数据...
本文将讲解 Oracle 中的分页查询,包括使用 ROWNUM 伪列和 ORDER BY 子句对查询结果进行排序和分页。 一、使用 ROWNUM 伪列实现分页查询 在 Oracle 中,ROWNUP 伪列是一个特殊的列,可以用来实现分页查询。例如,...
Oracle SQL分页语句是数据库查询中的一个重要概念,它允许我们从海量数据中按需获取特定范围的结果,比如第一页、第二页等。在Oracle数据库系统中,实现分页查询通常使用ROWNUM伪列或者结合RANK()、DENSE_RANK()、...
在Oracle数据库中,分页查询是一项非常常见的操作,特别是在处理大量数据时,为了提高用户体验,我们需要将结果集分块加载,这就是所谓的分页。在这个Java和Oracle结合的分页实现中,我们将探讨如何通过Java后端配合...
总结来说,Oracle和JSP结合实现分页涉及以下几个步骤:在Oracle中构造分页查询,使用JDBC在Servlet中执行查询,然后在JSP页面中展示数据。理解并熟练掌握这些步骤对于开发高效、用户友好的数据驱动网站至关重要。在...
在Java Web开发中,与Oracle数据库进行交互时,分页功能是常见的需求,尤其是在处理大量数据时,为了提高用户体验和加载速度,分批次地显示数据是必不可少的。本项目提供的源代码正是针对这一需求,提供了在Java Web...
Oracle数据库在处理大数据量时,分页查询是一个重要的性能优化手段。传统的ROWNUM分页方式在某些场景下可能无法满足需求,特别是在数据量过大或需要跨多行进行排序时,会出现效率低下甚至错误的结果。因此,“Oracle...
本文将详细探讨三种常用的Oracle分页SQL方法:ROWNUM、ROWNUM结合子查询以及新引入的Oracle 12c的FETCH NEXT WITH OFFSET语法。这三种方法各有优缺点,适用于不同的场景。 1. ROWNUM方法: ROWNUM是Oracle中最基础...
关于oracle 的分页、翻页的java源代码,结合JDBC连接数据库实现,比较基础的JDBC结合swing图形框架实现,适合Java初学者使用
在“ssh+oracle分页”这个主题中,我们将深入探讨如何利用这三个框架与Oracle数据库进行集成,并实现数据的分页显示。 1. **Struts框架**:Struts是一个基于MVC(Model-View-Controller)设计模式的Java Web框架。...
### 带排序的Oracle分页存储过程 在开发Web应用程序的过程中,分页是一个非常常见的需求。为了提高系统的性能及可维护性,采用存储过程来实现分页逻辑是一种较为推荐的做法。下面将详细介绍如何利用Oracle数据库中...
总的来说,"SSH+Oracle通用分页"是Java Web开发中常见的需求,它涉及到SSH框架的集成使用和Oracle数据库的高效查询策略。理解并熟练掌握这些知识,对于开发高性能、用户体验良好的Web应用至关重要。在实际项目中,还...
### Oracle分页与排序知识点详解 #### 一、Oracle分页查询原理及应用 在Oracle数据库中,实现分页查询通常依赖于`ROWNUM`伪列。`ROWNUM`为每一行分配一个唯一的行号,从1开始递增。利用这一特性,我们可以有效地...
在Oracle数据库中,分页查询是一项...总的来说,通过精心设计的存储过程,我们可以实现高效的多条件Oracle分页查询,同时确保查询性能不受数据量的影响。在实际应用中,应根据具体情况进行调整和优化,以达到最佳效果。