如何写一对多分页的SQL
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,这篇文章给大家介绍如何写一对多分页的SQL,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。导读MySQL一对多的数据分页是非常常见的需求,比如我们要查询商品和商品的图片信息。但是很
千家信息网最后更新 2025年12月03日如何写一对多分页的SQL
这篇文章给大家介绍如何写一对多分页的SQL,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
| 导读 | MySQL一对多的数据分页是非常常见的需求,比如我们要查询商品和商品的图片信息。但是很多人会在这里遇到分页的误区,得到不正确的结果。 |
MySQL一对多的数据分页是非常常见的需求,比如我们要查询商品和商品的图片信息。但是很多人会在这里遇到分页的误区,得到不正确的结果。今天就来分析并解决这个问题。
问题分析
我们先创建一个简单商品表和对应的商品图片关系表,它们之间是一对多的关系:
然后我分别写入了一些商品和这些商品对应的图片,通过下面的左连接查询可以看出它们之间具有明显的一对多关系:
SELECT P.PRODUCT_ID, P.PROD_NAME, PI.IMAGE_URL FROM PRODUCT_INFO P LEFT JOIN PRODUCT_IMAGE PI ON P.PRODUCT_ID = PI.PRODUCT_ID
按照传统的思维我们的分页语句会这么写:

当我按照预想传入了(0,2)想拿到前两个产品的数据,结果并不是我期望的:
2020-06-21 23:35:54.515 DEBUG 10980 --- [main] c.f.m.mappers.ProductInfoMapper.page : ==> Preparing: SELECT P.PRODUCT_ID, P.PROD_NAME,PI.IMAGE_URL FROM PRODUCT_INFO P LEFT JOIN PRODUCT_IMAGE PI ON P.PRODUCT_ID = PI.PRODUCT_ID limit ?,? 2020-06-21 23:35:54.541 DEBUG 10980 --- [main] c.f.m.mappers.ProductInfoMapper.page : ==> Parameters: 0(Long), 2(Long) 2020-06-21 23:35:54.565 DEBUG 10980 --- [main] c.f.m.mappers.ProductInfoMapper.page : <== Total: 2 page = [ProductDTO{productId=1, prodName='杯子', imageUrls=[http://asset.felord.cn/cup1.png, http://asset.felord.cn/cup2.png]}]我期望的两条数据是杯子和笔记本,但是结果却只有一条。原来当一对多映射时结果集 会按照多的一侧进行输出(期望4条数据,实际上会有7条),而前两条展示的只会是杯子的数据(如上图),合并后就只有一条结果了,这样分页就对不上了。那么如何才能达到我们期望的分页效果呢?
正确的方式
正确的思路是应该先对主表进行分页,再关联从表进行查询。
抛开框架,我们的SQL应该先对产品表进行分页查询然后再左关联图片表进行查询:
SELECT P.PRODUCT_ID, P.PROD_NAME, PI.IMAGE_URL FROM (SELECT PRODUCT_ID, PROD_NAME FROM PRODUCT_INFO LIMIT #{current},#{size}) P LEFT JOIN PRODUCT_IMAGE PI ON P.PRODUCT_ID = PI.PRODUCT_ID这种写法的好处就是通用性强一些。但是MyBatis提供了一个相对优雅的路子,思路依然是开头所说的思路。只不过我们需要改造上面的Mybatis XML配置:
大部分情况下分页是很容易的,但是一对多还是有一些小小的陷阱的。一旦我们了解了其中的机制,也并不难解决。
关于如何写一对多分页的SQL就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
商品
数据
结果
查询
图片
期望
思路
杯子
之间
产品
信息
内容
只有
常常见
是非
更多
误区
问题
需求
面的
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
腾讯云服务器gui 界面
链接定位软件开发
新手如何学习软件开发
plsq登录远程数据库
安徽局部点胶软件开发
数据库缓存技术了解
数据库故障以及恢复策略
查看服务器的远程端口
网络技术提取颜色
数据库共享需要多大内存
服务器自动关闭
计算机三级网络技术哪几题
软件开发 彼得原理
mysql数据库横纵查询
达梦数据库如何sql
端游网易我的世界服务器双开
我爱竞赛网第四届网络安全
泰安app软件开发哪家靠谱
武汉交个朋友互联网科技
lol 祖安服务器
烟台龙口dns的服务器地址
从大学生视角谈网络安全的论文
福州管理系统软件开发
网络安全是啥子
渣浪 网络安全法
知鸟网络安全法律法规
汤森路透并购数据库
金蝶中间层服务器不可用
网络安全原厂
.net图片服务器搭建