`
dreamkyh
  • 浏览: 24965 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ORACLE 分页查询出现重复记录的解决办法

阅读更多

   今天在用Oracle分页查询数据的时候出现了重复数据,有的数据无法查出,很郁闷,想了想,找了资料,发现问题

   分页语句:

 

 select
        * 
    from
        ( select
            row_.*,
            rownum rownum_ 
        from
            ( 
             select bb.*from(
            select
                bw.id,
                bw.nick_name,
                bw.is_vip,
                bw.fans_num,
                bw.blog_num,
                bwm.image_urls,
                bwm.image_type 
            from
                bw_user bw 
            left join
                bw_userface_image bwm 
                    on bw.headimgid=bwm.id  ) bb 
            order by bb.fans_num desc   ) row_ 
        where
            rownum <= 10
        ) 
    where
        rownum_ > 0

  这样查询的时候出现了重复数据

  原因:fans_num 这个字段是不固定的,也就是说是动态的,随时都可能在改变,导致数据出现重复,如果这个字段是固定的,就不会出现重复数据

  解决办法:如果不能确定排序字段是唯一的,必须添加另外一个排序字段,该字段最好是唯一索引键

 select
        * 
    from
        ( select
            row_.*,
            rownum rownum_ 
        from
            ( 
             select bb.*from(
            select
                bw.id,
                bw.nick_name,
                bw.is_vip,
                bw.fans_num,
                bw.blog_num,
                bwm.image_urls,
                bwm.image_type 
            from
                bw_user bw 
            left join
                bw_userface_image bwm 
                    on bw.headimgid=bwm.id  ) bb 
              order by bb.fans_num desc ,bb.id desc
            ) row_ 
        where
            rownum <= 10
        ) 
    where
        rownum_ > 0

  在里面添加了id排序,id是主键,是唯一的,就不会重现重复数据了

  注:如果排序的第一个字段(fans_num)改变的比较快,还是可能出现重复数据的,只是概率比较小

 

  郁闷了一上午,终于知道弄出来了,以前排序都没注意到这个问题

 

 

 

 

 

 

分享到:
评论

相关推荐

    Oracle数据库中分页查询介绍

    在Oracle数据库中,分页查询是一项关键功能,尤其在构建高效的数据检索系统,如自定义搜索引擎时,确保用户能够分批浏览大量数据。由于Web应用的无状态特性,每个请求都是独立的,维持数据库游标以供后续请求是低效...

    oracle分页案例

    本案例将详细介绍Oracle数据库中的分页查询实现方法。 在Oracle中,通常使用ROWNUM伪列来进行分页。ROWNUM是在查询结果集生成后立即分配的,表示每行的顺序号。但要注意,ROWNUM的值在子查询中会被重置,因此在构建...

    如何在Oracle中实现搜索分页查询

    在Oracle数据库中,实现搜索分页查询是一项常见的任务,特别是在构建高效的数据检索系统时。分页查询允许用户逐步浏览大量数据,而无需一次性加载所有结果,从而提高用户体验并减轻服务器负担。以下是如何在Oracle中...

    通用ORACLE存储过程实现分页和查询

    Oracle存储过程是数据库编程的重要组成部分,它允许程序员封装一系列的SQL和PL/SQL语句,以便在需要时重复使用。在大数据量的数据库应用中,分页查询是必不可少的,因为它能够有效地处理和展示结果,避免一次性加载...

    oracle存储过程通用分页

    然而,需要注意的是,Oracle 12c及更高版本引入了更高级的分页方法——`FETCH NEXT`和`OFFSET`子句,它们提供了更直观和高效的分页解决方案: ```sql CREATE OR REPLACE PROCEDURE get_paged_data_12c ( p_page_no...

    MyFaces Oracle大数据表分页封装.docx

    例如,你可以根据当前页码和每页记录数来计算要查询的起始位置和结束位置,然后执行相应的SQL查询,返回`DataPage`对象。 这样的设计允许你在不修改大量现有代码的情况下,轻松地为任何支持分页的表格添加大数据...

    oracle的伪列与分页

    综上所述,Oracle伪列如ROWID和ROWNUM在实际应用中发挥着重要作用,不仅可以帮助优化查询性能,还能轻松实现复杂的分页功能。同时,通过Java JDBC编程,可以进一步提升应用程序与Oracle数据库的集成度和灵活性。

    oracle rownum 学习

    Oracle ROWNUM学习 Oracle ROWNUM是Oracle...ROWNUM是一个非常有用的伪字段,可以用于限制查询返回的总行数、实现分页、限制查询返回的第一行记录等。但是,需要注意ROWNUM的限制和使用子查询来解决一些查询问题。

    JSP+JDBC_真分页(基于Oracle数据库分页)笔记

    这需要在数据库层面编写特定的SQL查询,利用Oracle的ROWNUM或者ROWNUMBER()函数来限制返回的记录数,从而实现高效的数据分页。例如,以下是一个简单的示例: ```sql SELECT * FROM (SELECT ROW_NUMBER() OVER ...

    Oracle中使用伪列rownum实现分页查询

    在Oracle数据库中,分页查询是一项常见的操作,用于在大量数据中检索特定范围的记录,以提高用户体验并减少网络传输的数据量。Oracle提供了一种特殊类型的列,称为伪列(Pseudo-Column),其中一个最著名的例子就是`...

    oracle 增加,删除,修改和分页存储过程

    在这个“Oracle增加、删除、修改和分页存储过程”项目中,我们将深入探讨这四个核心的数据库管理功能,并了解如何在PL/SQL环境中实现它们。 1. **增加(Insertion)**: 在Oracle中,创建一个用于插入数据的存储...

    java笔记\Oracle里sql不能用limit的处理

    Minus运算符可以用来删除重复的记录,我们可以使用它来删除前面的记录,从而实现分页查询。 例如,以下SQL语句可以查询表t_table_name的第11-20条记录: ```sql SELECT t_col1,t_col2 FROM t_table_name WHERE ...

    Nhibernate分页

    分页可以通过`Skip()`和`Take()`方法实现,它们分别代表跳过指定数量的记录和获取指定数量的记录。例如: ```csharp var result = session.QueryOver() .Where(x =&gt; yourPredicate) .Skip(pageSize * ...

    oracle 分页问题解决方案

    在上述问题中,开发者遇到了一个典型的Oracle分页查询问题,即在查询第4页及以后的数据时,结果重复。以下是这个问题的详细分析和解决方案。 首先,原始的分页查询SQL使用了嵌套子查询,并在外部查询中应用了`...

    php实现数据分页的通用方法类.zip

    这样的通用方法类使得代码复用性更强,减少了重复编写分页逻辑的工作量。 为了使用这个类库,你需要解压“php实现数据分页的通用方法类.zip”文件,然后在你的项目中引入这个PHP文件,根据类库的API文档或注释来...

    Oracle中使用存储过程实现分页.docx

    总的来说,这个Oracle存储过程的实现方式有效地解决了在Oracle数据库中进行分页查询的问题,通过动态构建SQL语句和使用游标,使得在应用程序中可以灵活地处理和展示大量数据。这种方式不仅提高了代码的可维护性,还...

    oracle学习及练习语句

    4. 查询与删除重复记录:在数据处理中,有时会出现重复的记录,这需要通过特定的SQL语句来处理。Oracle提供了`DISTINCT`关键字去除查询结果中的重复行,而在`删除重复记录sql.txt`中,你可能看到如何使用`GROUP BY`...

    oracle4的表查询和基本函数.docx

    在Oracle中,分页查询是一个常见需求。这里提到了三种方法。第一种是最基础的SELECT语句,但不包含分页信息。第二种和第三种方法使用ROWNUM伪列实现分页。例如,获取第7到第16条记录的查询可以这样写: ```sql ...

    Oracle数据库中ORDER BY排序和查询按IN条件的顺序输出

    在描述中提到的问题中,当使用`ORDER BY`对包含非唯一值的列进行排序,并结合分页查询时,发现不同页码的数据可能会有重复。这进一步证实了`ORDER BY`在Oracle中的不稳定特性。在没有唯一索引或主键约束的情况下,...

    数据库分页大全及示例

    本篇文章将详细介绍如何在不同的数据库系统中实现分页,包括JAVA、JSP环境下的数据库分页实现,以及Oracle、SQL Server、MySQL、DB2等数据库的分页查询方法。 在Java和JSP中,分页通常涉及到后端服务器和前端页面的...

Global site tag (gtag.js) - Google Analytics