一个很骚的sql报错:分页查询,每次返回数据可能不同

news/2024/11/8 12:09:16/

主表:bdg_budget_project

辅表:bdg_budget

关系:一对一关系

问题:相同sql ,分页查询,多次点击,返回的数据可能不同

原因:排序字段是辅表的字段【具体原理暂时没弄明白,大概是因为排序操作的触发时间 和 辅表数据应该会随主表进行变化】

SELECTid,name
FROM(SELECTTMP.*,ROWNUM ROW_IDFROM(SELECTa.id,a.budget_id,a.project_id,a.name,b.bdg_status_type,b.bdg_status_nameFROMbdg_budget_project aLEFT JOIN bdg_budget b ON a.budget_id = b.idWHEREb.budget_at = 2022AND b.deleted_flag = 0ORDER BYb.INSTITUTION_ID_PATH ASC,b.register_at DESC ) TMPWHEREROWNUM <= 40)
WHEREROW_ID > 20

解决:因为排序字段是固定的,只能从bdg_budget表获取字段,所以需要将bdg_budget放到主表的位置,既主表位置与辅表位置调换

SELECTid,name
FROM(SELECTTMP.*,ROWNUM ROW_IDFROM(SELECTa.id,a.budget_id,a.project_id,a.name,b.bdg_status_type,b.bdg_status_nameFROMbdg_budget bLEFT JOIN bdg_budget_project a ONa.budget_id = b.idWHEREb.budget_at = 2022AND b.deleted_flag = 0ORDER BYb.INSTITUTION_ID_PATH ASC,b.register_at DESC ) TMPWHEREROWNUM <= 40)
WHEREROW_ID > 20

注意:

        若辅表需要过滤,其实可以考虑将过滤条件添加至 ON 后,进行 AND 操作;可以缩小辅表的数据量,减少关联时的对比次数,但无论辅表是否存在符合要求的数据,最终都会查出主表的数据量;

        如果将限制条件放到 WHERE 后,则此时是对关联后的结果集进行筛选,数据量可能会减少;


http://www.ppmy.cn/news/2073.html

相关文章

Redis——Jedis的使用

前言 接上文&#xff0c;上一篇文章分享了在Linux下安装redis&#xff0c;以及redis的一些命令的使用。本文要分享的内容是java使用代码连接操作redis。 一、连接redis 这里我们要用到Jedis&#xff0c;那么什么是Jedis 简单来说&#xff0c;Jedis就是Redis官方推荐的Java连接…

快来生成你专属的英文名吧(使用字符级RNN)!

目录 一.前言 二.准备数据 三.构造神经网络 四.训练 五.网络采样&#xff08;预测&#xff09; 一.前言 数据集为18个国家的姓氏&#xff0c;任务是根据训练得到的模型&#xff0c;在给定国家类别和首字母后&#xff0c;能得到一个与该国人名非常相似的一个人名。 > …

蓝桥杯时间显示

题目描述 小蓝要和朋友合作开发一个时间显示的网站。 在服务器上&#xff0c;朋友已经获取了当前的时间&#xff0c;用一个整数表示&#xff0c;值为从 19701970 年 11 月 11 日 00:00:0000:00:00 到当前时刻经过的毫秒数。 现在&#xff0c;小蓝要在客户端显示出这个时间。…

性能分析之解析 RESAR 性能分析七步法

文章目录一、压力场景数据分析二、架构分析三、响应时间分析四、全局监控分析五、定向监控六、判断性能瓶颈七、提出解决方案一、压力场景数据分析 下面是⼀个登录接⼝的基准场景测试&#xff0c;JMeter 启动后&#xff0c;线程在 1-2 个的时候 TPS 已经达到 200 左右&#xf…

Debezium系列之:安装部署debezium2.0以上版本的详细步骤

Debezium系列之:安装部署debezium2.0以上版本的详细步骤 一、相关技术博客二、升级debezium2.0以上版本注意事项三、安装jdk四、修改kafka相关参数五、启动kafka connect六、查看kafka connect插件七、debezium升级遇到的错误汇总一、相关技术博客 升级debezium版本到debeziu…

Python基础知识进阶之正则表达式

一.match re.match 是从字符串的起始位置匹配一个模式&#xff0c; 匹配成功 re.match 方法返回一个匹配的对象&#xff0c;否则返回 None。 re.match(pattern, string, flags0) pattern&#xff1a; 匹配的正则表达式。 string&#xff1a; 要匹配的字符串。 flags&…

HTML学生个人网站作业设计 明星易烊千玺介绍(HTML+CSS) web前端开发技术 web课程设计 网页规划与设计

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

VIVADO时序约束之时序例外(set_false_path)

前言 当FPGA设计中的逻辑行为不能满足默认的时序要求时&#xff0c;设计者需要使用时序例外语法对该逻辑行为进行处理&#xff0c;例如&#xff1a;有些结果只需每个一个或多个时钟周期捕获一次。 vivado开发工具支持4个时序例外约束的语法&#xff0c;如下表所示&#xff1a;…