主子表一对多查询分页问题

问题

一个主表table_master, 对应三个子表 table_a, table_b, table_c,主子是一对多的关系

查询的接口需要主子结构的数据,而且要满足主表和子表的查询条件,并且还要支持分页

select
tm.*, 
ta.*, 
tb.*, 
tc.*  
from table_master tm
left join table_a ta on tm.id = ta.pid
left join table_b tb on tm.id = tb.pid
left join table_c tc on tm.id = tc.pid
where
//主表查询条件
//a表查询条件
//b表查询条件
//c表查询条件
limit 20, 0  // size: 20   current:1

如果这样写SQL,子表有多条分页就会出现问题

//查询结果
master_id   a_id  b_id  c_id
1           1     1     1
1           1     2     1
1           1     2     2
2           3     3     3
total = 4
//但实际我们需要的数据是这样的
master_id   List<a>  List<b>  List<c>
1           [1]      [1,2]    [1,2]
2           [3]      [3]      [3] 
total = 2

SQL中查询出来的结果有四条,主子结构组装后只有两条;因为分页是在SQL层进行的,分页数据就会不正确

解决方案

因为分页和查询条件都要满足,一次查询似乎无法完成需求,那么就查询两次。

第一次查询的时候,将查询条件和分页都带上,但只查询主表ID,因为查询结果是主子结构根据主表来分页的

第二次查询的时候不带分页,把第一次查询的主表ID作为查询条件,主子表的查询条件也要带上

分页信息取第一次的结果,数值取第二次的结果,就能完成正确的分页查询

//第一次查询
select
distinct
tm.id  
from table_master tm
left join table_a ta on tm.id = ta.pid
left join table_b tb on tm.id = tb.pid
left join table_c tc on tm.id = tc.pid
where
//主表查询条件
//a表查询条件
//b表查询条件
//c表查询条件
limit 20, 0  // size: 20   current:1//第二次查询
select
tm.*, 
ta.*, 
tb.*, 
tc.*  
from table_master tm
left join table_a ta on tm.id = ta.pid
left join table_b tb on tm.id = tb.pid
left join table_c tc on tm.id = tc.pid
where
tm.id in (第一次查询的主表ID)
//主表查询条件
//a表查询条件
//b表查询条件
//c表查询条件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/35385.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux上matplotlib字体缺失

问题 Linux上缺失Arial等字体&#xff0c;matplotlib绘图时无法显示对应字体 解决 直接在python环境中安装&#xff0c;mplfonts的安装方法是pip: pip install -U mplfonts使用 安装好mplfonts之后&#xff0c;需要有一个初始化的配置过程 在终端执行mplfonts init即可。

企业协同办公平台私有化部署,打造安全可控的工作环境

随着信息化时代的到来&#xff0c;企业协同办公平台成为了企业提高工作效率、提升团队协作能力的重要工具。然而&#xff0c;随之而来的数据泄露、信息安全等问题也给企业带来了巨大的挑战。为了保障企业的数据安全&#xff0c;越来越多的企业开始选择私有化部署企业协同办公平…

1.2章节input输入函数语法使用和示例

在Python中&#xff0c;input() 函数用于从用户获取输入。这个函数会等待用户输入一行文本&#xff0c;然后按回车键&#xff0c;最后将输入的文本作为字符串返回。 一、基本语法 当你运行上面的代码时&#xff0c;它会打印出 "请输入一些文字: "&#xff0c;然后等…

工商银行:低息差下的挣扎

时隔四年&#xff0c;市值再度超越贵州茅台成为A股“股王”。 今天要说的就是“宇宙行”——中国工商银行 虽然茅台的信仰开始崩塌&#xff0c;但各大银行股巨头们今年也不好过。2024年一季度六大行业绩集体受挫&#xff0c;息差普遍收窄超过20个基点。其中&#xff0c;包括工…

航天航空零部件装配制造MES系统解决方案详解

航天航空零部件制造行业是一个技术密集、工艺复杂且对精度和可靠性要求极高的行业。为了提升生产效率、保证产品质量并满足严格的行业标准&#xff0c;越来越多的航天航空零部件制造企业引入了MES系统。本文将详细介绍MES系统在航天航空零部件制造行业的应用方法及其价值。 一…

卸载vmware时2503,2502报错的解决办法

1.背景 windows 卸载vmware时&#xff0c;显示2503报错&#xff0c;无法完全卸载 2. 解决方案 2.1 参考安装报错2502&#xff0c;2503的处理方式 文献&#xff1a;https://blog.csdn.net/zhangvalue/article/details/80309828 2.1 步骤&#xff1a; 2.1.1 cmd 管理员打开…

《2023-2024安服安全技术研究白皮书(正式版)》

2023年5月&#xff0c;我们再次更新了《2022-2023安服安全技术研究白皮书》&#xff0c;这次我们进行了内容丰富&#xff0c;并特别介绍了我们围绕反APT技术栈的一些研究和想法&#xff0c;通过该技术栈的积累扩展了更多的安全能力&#xff0c;包括对攻击生命周期本身的认知、攻…

Arduino - 继电器

Arduino - 继电器 In a previous tutorial, we have learned how to turn on/off an LED. In this tutorial, we are going to learn how to turn on/off some kind of devices that use the high voltage power supply(such as a light bulb, fan, electromagnetic lock, lin…

亚马逊卖家的ERP代理贴牌与独立部署策略

贴牌&#xff0c;就是将亚马逊ERP进行个性化定制&#xff0c;包括更换成自己公司的logo、域名、收款账户&#xff0c;同时支持与自己的物流渠道进行对接&#xff0c;以满足自建仓库的需求。 对于独立部署&#xff0c;这需要有自己的服务器、数据库和存储空间等基础设施。在贴牌…

AI时代的风口,中小企业也不能错过

文&#xff5c;白 鸽 编&#xff5c;周效敬 这些场景&#xff0c;对你来说或许并不陌生&#xff1a; 在医院的大屏上&#xff0c;一个医生模样的数字人在做医疗知识科普&#xff1b;在抖音的直播间里&#xff0c;一个真人模样的数字人在线上直播带货&#xff0c;24小时无休无…

音频剪辑技巧:音频降噪在线怎么降噪?分享7种录音去除杂音方法

相信很多小伙伴们都有这种苦恼&#xff1a;在编辑音频时&#xff0c;你可能发现即使你使用了价格昂贵的隔音麦克风&#xff0c;在录音中仍然存在呼吸声和咳嗽声。因此&#xff0c;如果要传达清晰干净的声音以表达你的信息&#xff0c;你该如何从录音去除杂音呢&#xff1f;别心…

小程序消息定时任务(定时触发器)发送总结

文章目录 小程序消息定时任务(定时触发器)发送总结1.开发思路2.实现办法3.查看定时触发器是否正常运作4.总结小程序消息定时任务(定时触发器)发送总结 1.开发思路 在使用小程序的时候总是会遇到消息任务发送的情况,但是很多时候是预约发送,这个时候我们就要使用小程序里…

Android高级面试_2_IPC相关

Android 高级面试-3&#xff1a;语言相关 1、Java 相关 1.1 缓存相关 问题&#xff1a;LruCache 的原理&#xff1f; 问题&#xff1a;DiskLruCache 的原理&#xff1f; LruCache 用来实现基于内存的缓存&#xff0c;LRU 就是最近最少使用的意思&#xff0c;LruCache 基于L…

OverTheWire Bandit 靶场通关解析(上)

介绍 OverTheWire Bandit 是一个针对初学者设计的网络安全挑战平台&#xff0c;旨在帮助用户掌握基本的命令行操作和网络安全技能。Bandit 游戏包含一系列的关卡&#xff0c;每个关卡都需要解决特定的任务来获取进入下一关的凭证。通过逐步挑战更复杂的问题&#xff0c;用户可…

《每天5分钟用Flask搭建一个管理系统》第3章:路由与视图

第3章&#xff1a;路由与视图 3.1 路由的定义和作用 路由是URL到视图函数的映射。在Flask中&#xff0c;路由定义了当用户访问特定URL时应该调用哪个函数来处理请求。 示例代码&#xff1a;定义路由 from flask import Flask app Flask(__name__)app.route(/) def home():…

抖音微短剧小程序源码部署:轻松实现巨量广告回传功能

在数字化营销的时代&#xff0c;如何更有效地抓住用户的注意力&#xff0c;提升品牌知名度和用户黏性&#xff0c;已成为每个商家必须面对的挑战。抖音微短剧小程序&#xff0c;作为一种新兴的营销工具&#xff0c;正以其独特的魅力迅速占领市场。今天&#xff0c;我们就来探讨…

Interview preparation--elasticSearch倒排索引原理

搜索引擎应该具备哪些要求 查询速度快 优秀的索引结构设计高效率的压缩算法快速的编码和解码速度 结果准确 ElasiticSearch 中7.0 版本之后默认使用BM25 评分算法ElasticSearch 中 7.0 版本之前使用 TP-IDF算法 倒排索引原理 当我们有如下列表数据信息&#xff0c;并且系统…

【字符串】【双指针】1、仅仅反转字母+2、回文子串+ 3、最长回文子串+4、验证回文串+5、反转字符串中的单词

今天依旧是字符串&#xff01;2道简单&#xff0b;3道中等 1、仅仅反转字母&#xff08;难度&#xff1a;简单&#xff09; 该题对应力扣网址 错误做法 一开始是“原始”思路&#xff0c;交了之后果然不对&#xff0c;错误的思路我也就不解释了。 class Solution { public:…

Debezium系列之:Mysql和SQLServer数据库字段类型覆盖测试

Debezium系列之:Mysql和SQLServer数据库字段类型覆盖测试 一、需求背景二、类型对比三、完整流程三、Mysql数据库全字段类型覆盖测试四、SQLServer数据库字段类型覆盖测试一、需求背景 Debezium版本升级迭代,要做字段类型测试,确保版本间字段类型的差异下游能够自动适应,或…

在android系统中应用java反射

在Android系统中使用Java反射是一种强大的技术&#xff0c;它允许我们在运行时检查和修改代码、类和对象的行为。以下是三个在Android开发中使用Java反射的经典实践案例&#xff0c;并附上了相应的编程代码示例。 案例一&#xff1a;动态调用私有方法 假设我们有一个包含私有…