ORACLE 分页排序后的数据重复或缺失问题
今天一大早业务人员就反映说用户导出的订单数据,有好几单是重复,并且缺失了某一单。
第一步:查询数据表。表里实际数据没有重复,也没有缺失。那么就可能是导出过程出错了(因为是异步分页导出,所以最先怀疑这部分代码)
第二步:复现问题(实际上遇到生产问题第一步就是复现问题,但是我忘了.... )
第三步:检查异步分页导出代码,简直是脏乱差一塌糊涂,但是运行没毛病(大多数代码都是如此,经过好几波素质不一程序员的蹂躏,再整洁的代码也会乱套)
第四步:检查查询语句
在第三步没问题之后,其实我就已经怀疑是分页问题了。
观察导出的数据,发现重复的记录都在两页分界的上下,比如记录A,它在第2页有一条记录,在第3页又有一条记录,但是不会在同一页出现两条相同记录。
导出分页是以 ORDER_DATE 字段排序,值都是 2025-01-13 00:00:00 这种,时分秒全是0,
如果是同一天的订单,那 ORDER_DATE 就都一样,排序相当于无效,每次查询结果的次序不固定,也就导致分页错乱了
On ROWNUM and Limiting Results 这篇文章中模拟了该问题
-- 创建表和数据
create table t as
select mod(level,5) id,
trunc(dbms_random.value(1,100)) data
from dual
connect by level <= 10000;
-- 第1次查询
select *
from (
select a.*, rownum rnum
from (
select id, data
from t
order by id
) a
where rownum <= 150
)
where rnum >= 148;
-- 第2次查询
select *
from (
select a.*, rownum rnum
from (
select id, data
from t
order by id
) a
where rownum <= 151
)
where rnum >= 148;
会发现第1次和第2次查询结果中,rownum 相同的数据并不相同,说明 rownum 并不固定。
One important thing about using this pagination query is that the ORDER BY statement should order by something unique. If what you are ordering by is not unique, you should add something to the end of the ORDER BY to make it so.
分页查询中重要的事情是,ORDER BY 语句应该有唯一性,如果 order by 字段不唯一,那么你也应该加上一些东西最终让它唯一。
ORACLE 分页排序后的数据重复或缺失问题的更多相关文章
- 已知内存BUF单元开始的区域中存放有一组无符号字节数据,要求将这些数据按从小到大的顺序排列,排序后的数据依然放在原来的存储区中。
设计要求: 已知内存BUF单元开始的区域中存放有一组无符号字节数据,要求将这些数据按从小到大的顺序排列,排序后的数据依然放在原来的存储区中.(10分) #make_BIN# BUF DB 22,21, ...
- Oracle数据库排序后分页查询数据错误问题解决
一.问题描述:根据更新时间倒序排序然后分页查询数据,但是点击分页操作的时候,会出现数据重复看似没有操作的情况 二.问题错误原因分析 分页查询的SQL语句: select * FROM (select ...
- Mysql分片后分页排序拉取数据的方法
高并发大流量的互联网架构,一般通过服务层来访问数据库,随着数据量的增大,数据库需要进行水平切分,分库后将数据分布到不同的数据库实例(甚至物理机器)上,以达到降低数据量,增加实例数的扩容目的. 一旦涉及 ...
- oracle分页排序,点击下一页数据不刷新
oracle数据库中,如果每一页的最后一条和次页第一条数据的排序字段重复,会导致排序混乱,出现点击下一页数据不刷新的现象,所以一般排序至少选择一个相对唯一的字段.在前端页面可以输入排序条件的场景中,最 ...
- Oracle 分页、取期间数据、TOP前几
Oracle没有 sqlserver的 top number 功能.只能以期间的形式实现 代码实现分页,参数curPage 当前页.pageSize 每页行数,计算出起始结束页码 int startP ...
- oracle获取排序第一的数据
一:按照某字段排序(时间,总数等),获取第一条 select a.* FROM ( select * from ( select t.*,row_number() over(partition by ...
- oracle获取排序后的第一条信息
查询表table1里字段id小于10的所有数据,并且让数据根据id降序排列,然后得到第一条数据 select * from (select * from table1 where id<10 o ...
- oracle查询排序后的前几条记录
select * from (select * from table order by 字段名 desc) where rownum<你要查的记录条数,这样才能符合条件.
- laravel中get方式表单提交后, 地址栏数据重复的问题
csrf_field这个要放form表单下面第一行的位置
- EF 数据重复和缺失问题(select 错误 )
字段有 id,name,password,sex 1.错误举例: var data = db.User.Select(d => d): 2修正 var data = db.User.Sele ...
随机推荐
- Lnmp编译安装(2020)
之前写过几篇有关安装lnmp环境的文章,现在回顾感觉有些比较老了或者并不是好的操作,于是更新这篇 1. 安装Nginx 1) 依赖安装 yum install gcc gcc-c++ openssl ...
- Redis集群搭建-Docker
使用docker搭建本地集群Redis服务(参考:https://www.cnblogs.com/slowbirdoflsh/p/11633113.html) 环境配置 # 拉取redis镜像 doc ...
- uni-app 主题切换
1.前言 功能介绍:提供个性化的展示方案给用户,用户可以选择喜欢的主题色,让App使用该主题色进行渲染 功能实现:主要分为2个模块,一,选择主题色并存储,二,读取选择的主题色,使用该颜色对部分内容进行 ...
- Win10虚拟机安装Docker解决Docker Engine Stopped问题记录
跟着网上的帖子开启WSL2安装DockerDesktop, 但是无法启动Docker,一直[Docker Engine stopped] 继续跟着网上的帖子解决问题,检查电脑各种配置都搞一通后还是无法 ...
- 自定义资源支持:K8s Device Plugin 从原理到实现
本文主要分析 k8s 中的 device-plugin 机制工作原理,并通过实现一个简单的 device-plugin 来加深理解. 1. 背景 默认情况下,k8s 中的 Pod 只能申请 CPU 和 ...
- 腾讯技术岗位笔试&面试题(五)
说在前面 本篇文章是腾讯技术面试题目汇总第五篇. 后续将持续推出互联网大厂,如阿里,腾讯,百度,美团,头条等技术面试题目,以及答案和分析. 欢迎大家点赞关注转发. 1.define.const.typ ...
- mongo docker compose
49dSsULIAv6NiP8hdqqbapRTHVx9BRYU4VVakN9A4FJWV0KufqEm/UoTUvn9Z4eg FRP7iHXF6Qiou5MK2Ak76zRBU7MOIVCl0DI ...
- Http2服务调用排坑记
原文作者:陈友行原文链接:https://www.nginx.org.cn/article/detail/89转载来源:NGINX开源社区著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- Qt音视频开发38-USB摄像头解码linux方案
一.前言 做嵌入式linux上的开发很多年了,扳手指头算算,也起码9年了,陆陆续续做过很过诸如需要读取外接的USB摄像头或者CMOS摄像机的程序,实时采集视频,将图像传到前端,或者对图像进行人脸分析处 ...
- Qt编写的项目作品31-PDF阅读器(雨田哥作品)
一.功能特点 仿WPS界面. 预览PDF文件. 支持PDF预览放大.缩小. 支持目录预览查看. 支持目录点击跳转页查看. 支持页数指定跳转. 支持上一页.下一页.首页.尾页跳转. 支持鼠标拖拽滑动预览 ...