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

2023-10-26

追加:

        不是主要问题,应该是排序字段缺少唯一值,后面加了rowid,生效了


主表:bdg_budget_project

辅表:bdg_budget

关系:一对一关系

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

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

SELECT
	id,
	name
FROM
	(
	SELECT
		TMP.*,
		ROWNUM ROW_ID
	FROM
		(
		SELECT
			a.id,
			a.budget_id,
			a.project_id,
			a.name,
			b.bdg_status_type,
			b.bdg_status_name
		FROM
			bdg_budget_project a
		LEFT JOIN bdg_budget b ON a.budget_id = b.id
		WHERE
			b.budget_at = 2022
			AND b.deleted_flag = 0
		ORDER BY
			b.INSTITUTION_ID_PATH ASC,
			b.register_at DESC ) TMP
	WHERE
		ROWNUM <= 40)
WHERE
	ROW_ID > 20

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

SELECT
	id,
	name
FROM
	(
	SELECT
		TMP.*,
		ROWNUM ROW_ID
	FROM
		(
		SELECT
			a.id,
			a.budget_id,
			a.project_id,
			a.name,
			b.bdg_status_type,
			b.bdg_status_name
		FROM
			bdg_budget b
		LEFT JOIN bdg_budget_project a ON
			a.budget_id = b.id
		WHERE
			b.budget_at = 2022
			AND b.deleted_flag = 0
		ORDER BY
			b.INSTITUTION_ID_PATH ASC,
			b.register_at DESC ) TMP
	WHERE
		ROWNUM <= 40)
WHERE
	ROW_ID > 20

注意:

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 删除或更改 ETL 中的记录

    我有一个表 我在上面构建了 ETL 服务 货物记录 到达 离开 进入表格 我已经这样做了 我的桌子将被删除 当项目标识符第二次到达数据库时 两条记录都被删除 label cost time x2 29 14 5 2020 01 00 00
  • 对 SQL 时间序列进行采样

    我有一个日期时间的时间序列 存储在 mySQL 中的双列 并且希望每分钟对时间序列进行采样 即以一分钟的间隔提取最后一个值 有没有一种有效的方法可以在一个 select 语句中执行此操作 蛮力方法将涉及选择整个系列并在客户端进行采样或为每个
  • 金融 - 计算到期收益率

    我读了this https stackoverflow com questions 1173555 open source financial library specifically yield to maturity发布关于 net 库
  • 如何使用 ALTER TABLE 添加新列并使其唯一?

    我该如何使用ALTER TABLE添加新列并使其独一无二 取决于 DBMS 但我认为以下内容相当可移植 ALTER TABLE table name ADD column name datatype ALTER TABLE table na
  • 日常 MySQL(部分和过滤)复制的最佳实践?

    我有一个相当大的数据库 有超过 40 个表 我只需要复制几个表 5 并且每个表也被过滤 我正在寻找一些复制这些数据的最佳实践 每天就足够了 我可以只选择几个表并为每个表包含一些 WHERE 子句 我正在考虑为每个表启动 mysqldump
  • TSQL:无法对 COUNT(*) 执行聚合函数 AVG 来查找一天中最繁忙的时间

    考虑一个保存日志数据的 SQL Server 表 重要的部分是 CREATE TABLE dbo CustomerLog ID int IDENTITY 1 1 NOT NULL CustID int NOT NULL VisitDate
  • oracle lag 函数与 group by

    我有一个查询忽略从前一个值增加的值 例如 采用下表 col1 col2 col3 5 1 A 4 2 A 6 3 A 9 4 B 8 5 B 10 6 B 现在进行以下查询 select col1 from select col1 lag
  • C# 查询两个数据库的数据

    我目前有一个查询 我正在从两个不同的数据库获取数据 这些数据被附加到一个名为 accountbuys 的列表中 我的第一个表有三个数据条目 3个想要购买股票的帐户 下一张表有 17 个数据点 购买 17 只股票 I am merging t
  • VIEW for 表结合 UNION ALL 的 MySQL 性能

    假设我有 2 张桌子MySQL create table persons id bigint unsigned not null auto increment first name varchar 64 surname varchar 64
  • 在bigquery中比较两个表的有效方法

    我有兴趣比较两个表是否包含相同的数据 我可以这样做 standardSQL SELECT key1 key2 FROM SELECT table1 key1 table1 key2 table1 column1 table2 column1
  • 尚未为此带有 SQL Server 的 DbContext .NET Core 配置数据库提供程序

    我一直用这个把头撞在墙上 并且一直在谷歌上搜索无济于事 我刚刚开始一个新的 ASP NET Core MVC 项目 我已将这两个包安装 更新为 2 2 0 Microsoft EntityFrameworkCore SqlServer Mi
  • If Else 条件的 SQLite 语法

    我正在使用 SQLite 数据库 我的表有一个名为 密码 的文本列 早些时候 为了检索我用来执行简单操作的值select from myTable询问 但现在的要求是 如果Password值不是NULL那么我需要将其显示为 是 或 否 它是
  • 从复选框列表中选择循环生成的复选框中的一个复选框

    抱歉我的英语不好 在我的 ASP NET 网站上 我从 SQL 表导入软件列表 看起来像这样 但实际上要长得多 Microsoft Application Error Reporting br br Microsoft Applicatio
  • 如何限制两个表之间一对多关系中的多个数量?

    我有一个带有两个 MySql 表的 MySQL 数据库 第一个是第一个表 表 A 有一列具有唯一值 从值 从 1 到 n 在第二个表 2 表 B 中 我有两列 在第一个表中我有一个名称 在第二个我的值从 1 到 n 如果我在 中添加一个值
  • SQLite 中的累积求和值

    我正在尝试在 SQLite 中执行值的累积和 我最初只需要对一列求和并获得代码 SELECT t MyColumn SELECT Sum r KeyColumn1 FROM MyTable as r WHERE r Date lt t Da
  • 如何将 SQL 结果存入 STRING 变量?

    我正在尝试获取 C 字符串变量或字符串数 组中的 SQL 结果 是否可以 我需要以某种方式使用 SqlDataReader 吗 我对 C 函数和所有功能非常陌生 曾经在 PHP 中工作 所以如果可以的话请给出一个工作示例 如果相关 我已经可
  • SQL 更新数据集中的位置

    id1 id2 bool 1 1 F 1 2 F 2 1 F UPDATE table name SET bool T WHERE id1 id2 IN 1 1 2 1 Need work here 所以基本上我想选择条件为 id1 id2
  • 为什么我们不能有多个主键?

    我知道表中不能有超过 1 个主键 但技术原因是什么 直接拉取自SO https stackoverflow com questions 217945 can i have multiple primary keys in a single
  • MySql如何通过过滤多列来限制多个数字?

    我想从数据库中获取 4 个不同类别的 50 个问题 我想要 4 个不同类别中每个类别的不同数量的问题 我的结果集必须包含第一类 12 个问题 第二类 20 个问题 第三类 10 个问题和第四类 8 个问题 我的问题表中总共有 50 个问题
  • 为什么 sql 字段名称中不应该包含逗号?

    人们一直告诉我列名中不应包含空格 我只是想知道 这是为什么 这是我为学校创建的一些数据库表遇到的问题 字段名称包括 Preble 和 Darke 相反 它们需要是 普雷布尔县 俄亥俄州 和 达克县 俄亥俄州 如果它们是行名称 我只需创建一个

随机推荐

  • IDEA常用的配置

    1 主题风格 有些小伙伴不太喜欢黑色主题 此时可以设置IDEA的主题风格 Settings gt Editor gt Color Scheme 2 设置字体 假如一个方法有50 60行 字体设置过大 要看完整个方法 需要滚动多次滑轮 由于字
  • JVM底层又是如何实现synchronized的

    目前在Java中存在两种锁机制 synchronized和Lock Lock接口及其实现类是JDK5增加的内容 其作者是大名鼎鼎的并发专家Doug Lea 本文并不比较synchronized与Lock孰优孰劣 只是介绍二者的实现原理 数据
  • cuda与Eigen不兼容的解决方案

    cuda提供强大的矩阵计算库cuBlas 但cuBlas没法进行特征值 逆矩阵等高级的运算 要解决这个问题 要么自己写算法 太难 要么调用线性代数运算库 而线性代数运算库中Eigen是最简便易用的一个 当我想把这两个库放在一起编译的时候 出
  • 因果推断(一)-基础

    1 因果推断定义 根源 因果推断就是找到事情发生的原因 重要的现象 桑普森悖论 Casualty和Association之间的区别 Association是人工智能的基础 人工智能Association的问题 知其然 不知其所以然 不可解释
  • System.out.println()的详细解释

    System out println 的深入理解 文章参考了公众号 Java面试那些事儿 面向对象编程即创建了对象 所有的事情让对象帮忙操作 即对象调用方法 System out println hello world 输出 hello w
  • ubuntu 进入 recovery mode 修改系统文件

    当ubuntu无法启动时 根据提示修改某些配置即可 无需重新安装系统 recovery mode 为我们提供了这种便利 启动步骤如下 1 recovery mode 按e键进入如下菜单 2 ro recovery nomodeset 修改为
  • 文件夹重定向失败解决方案

    系统 Win7 原本想将Administrator里的下载目录重定向到D盘下的Download 结果目标选择了D盘 再想将其改成D Download时 出现 无法将父级重定向到后代 指定的路径无效 的提示 想恢复成默认 系统又说 无法生成
  • 2021美赛C题数据(完整有解压密码)

    C题数据 数据链接 https pan baidu com s 1ahACnhdNWRbfRQSVqPM eQ 提取码 eatx 解压的密码是 Af6SP7rdm33PxPJmDb4wZq7cw 说实话 一看到数据 我就果断放弃了C 不过肯
  • CPU的两种架构概要

    2种CPU架构 冯诺伊曼架构和哈佛架构 1 哈佛结构 是一种将程序指令储存 和 数据储存分开的存储器结构 哈佛结构的微处理器通常具有较高的执行效率 其程序指令和数据指令分开组织和储存的 执行时可以预先读取下一条指令 常见的有 PIC系列芯片
  • 计算机毕业设计ssm基于MySQL的房屋中介系统7m60a9 (附源码)轻松不求人

    项目运行 环境配置 Jdk1 8 Tomcat7 0 Mysql HBuilderX Webstorm也行 Eclispe IntelliJ IDEA Eclispe MyEclispe Sts都支持 项目技术 ssm mybatis Ma
  • VBS脚本统计红楼梦中贾宝玉出现的次数

    VBS脚本统计红楼梦中贾宝玉出现的次数 文件 链接 https pan baidu com s 1T XIbIHzMZiIX8IiSMcZdg 提取码 sti6 脚本代码 Dim fso ts s 创建Scripting FileSyste
  • 一份关于windows server服务器的安全漏洞处理建议(来自绿盟安全评估)

    文章目录 前言 一 服务器主机存在漏洞应该怎么修复 二 报告中的高危漏洞 部分展示 1 Microsoft Windows CredSSP 远程执行代码漏洞 CVE 2018 0886 2 SSL TLS协议信息泄露漏洞 CVE 2016
  • matlab读取csv有字符有数字,MATLAB读取csv文件里面既有文本又有数字的文件怎么读取。(可以不止csv文件,txt等文件都可以)...

    MATLAB读取csv文件里面既有文本又有数字的文件怎么读取 一 第一种方法用代码读取 用代码读取 1 如果你要读的文件里面都是数字的话 用csvread函数 它有三种方式读取 但是它的缺点就是只能读取全是数值的文件 简单来说 只能读数字
  • 智能小车红绿灯识别功能的实现(python,ubuntu)

    From sztu 自动化专业的小菜鸡 1 基本介绍 交通标志识别代码存在于 config teleop src smartcar scripts文件目录下的camera cmd py中 核心程序为light detection函数 lig
  • JavaScript实现简单区块链

    用JavaScript来实现一个简单的区块链 通过实现过程 你将理解区块链是什么 区块链就是一个分布式数据库 存储结构是一个不断增长的链表 链表中包含着许多有序的记录 然而 在通常情况下 当我们谈到区块链的时候也会谈起使用区块链来解决的问题
  • Implement Trie (Prefix Tree)前缀树系列

    208 Implement Trie Prefix Tree class Trie def init self Initialize your data structure here self tree def insert self wo
  • [HDLBits] Dualedge

    You re familiar with flip flops that are triggered on the positive edge of the clock or negative edge of the clock A dua
  • 时间函数——setDate()

    实例 设置一个月的某一天 var d new Date d setDate 15 d 输出结果 Sun Sep 15 2019 11 06 10 GMT 0800 中国标准时间 定义和用法 setDate 方法用于设置一个月的某一天 浏览器
  • [1055]VM上配置Centos7网络&设置静态IP&修改hostname

    文章目录 配置ceotos7网络 设置静态IP 修改hostname 配置ceotos7网络 首先在安装好centos7的时候会在本机电脑的网络管理里面出现以下网络 开机登录时候直接ping www baidu com 会发现ping不同
  • 一个很骚的sql报错:分页查询,每次返回数据可能不同

    追加 不是主要问题 应该是排序字段缺少唯一值 后面加了rowid 生效了 主表 bdg budget project 辅表 bdg budget 关系 一对一关系 问题 相同sql 分页查询 多次点击 返回的数据可能不同 原因 排序字段是辅