mybatis同一张表多次连接查询相同列赋值问题小结

发布时间 - 2026-01-10 22:46:29    点击率:

最近遇到的一些问题总结:

1. MySQL数据库同一张表做四次左连接查询数据冗余。

a. mysql数据库连接查询

b. mysql表数据去重

2. mybatis查询相同列赋值重复问题。

a. 使用mybatis强大的resultMap

b. mysql数据查询别名

数据库表为

Create Table

CREATE TABLE `STUDENT_SCORE` (
 `score_id` int(11) unsigned NOT NULL AUTO_INCREMENT,//主键
 `test_id` int(11) NOT NULL,//标识考试信息
 `course` varchar(45) DEFAULT NULL,//课程名
 `score` float DEFAULT NULL,//分数
 PRIMARY KEY (`score_id`)
)

现在想要查询近四次考试改名同学的考试情况对比数据,查询语句如下:

SELECT score0.test_id, core0.course, score0.score, score1.score, score2.score, score3.score
FROM (SELECT * FROM STUDENT_SCORE WHERE test_id='11') score0 
LEFT JOIN (SELECT * FROM STUDENT_SCORE WHERE test_id='12') score1
ON score0.course = score1.course
LEFT JOIN (SELECT * FROM STUDENT_SCORE WHERE test_id='13') score2
ON score0.course = score2.course
LEFT JOIN (SELECT * FROM STUDENT_SCORE WHERE test_id='14') score3
ON score0.course = score3.course

使用相同的sql语句写入mybatis的xml中:

<select id="findVCCFrameworkCompareData" parameterType="java.util.HashMap" resultMap="frameworkCompareMapper">
   SELECT 
   score0.test_id, 
   core0.course, 
   score0.score, 
   score1.score, 
   score2.score, 
   score3.score
   FROM (SELECT * FROM STUDENT_SCORE WHERE test_id=#{id0}) score0 
   LEFT JOIN (SELECT * FROM STUDENT_SCORE WHERE test_id=#{id1}) score1
   ON score0.course = score1.course
   LEFT JOIN (SELECT * FROM STUDENT_SCORE WHERE test_id=#{id2}) score2
   ON score0.course = score2.course
   LEFT JOIN (SELECT * FROM STUDENT_SCORE WHERE test_id=#{id3}) score3
   ON score0.course = score3.course
</select>

以上查询执行结果全部未test_id=id0时的数据,将score1.test_idscore2.test_id添加至查询结果发现四个id值全部都为id0。

推测由于使用同一个表进行连接查询,列名相同,赋值时赋了相同的值。

在网上搜索有看到通过在resultMap中配置<collection><asociation>解决此问题。

尝试配置resultMap未果。

通过给表查询添加别名将以上查询语句修改如下,解决参数赋值冲突的问题。

SELECT
score0.test_id,
core0.course,
score0.score,
score1.score,
score2.score,
score3.score
FROM (SELECT * FROM STUDENT_SCORE score0 WHERE score0.test_id=#{score0}) score0
LEFT JOIN (SELECT * FROM STUDENT_SCORE score1 WHERE score1.test_id=#{score1}) score1
ON score0.course = score1.course
LEFT JOIN (SELECT * FROM STUDENT_SCORE score2 WHERE score2.test_id=#{score2}) score2
ON score0.course = score2.course
LEFT JOIN (SELECT * FROM STUDENT_SCORE score3 WHERE score3.test_id=#{score3}) score3
ON score0.course = score3.course

总结:

1、处理问题时力求正确简洁,切记多个问题混杂在一起影响问题定位与解决思路。

2、在进行多个表查询时,尽量使用别名对表进行重命名加以区分。

3、使用group by去重,后面跟哪一列对哪一列去重。

以上所述是小编给大家介绍的mybatis同一张表多次连接查询相同列赋值问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# mybatis  # 赋值  # MyBatis的嵌套查询解析  # Java的MyBatis框架中实现多表连接查询和查询结果分页  # Mybatis中连接查询和嵌套查询实例代码  # 多个  # 小编  # 在此  # 给大家  # 将以  # 都为  # 所述  # 查询结果  # 给我留言  # 感谢大家  # 重命名  # 主键  # 疑问请  # 有任何  # 数据查询  # 在网上  # score_id  # score  # int  # STUDENT_SCORE 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 网站制作软件免费下载安装,有哪些免费下载的软件网站?  Laravel如何使用Eloquent进行子查询  ,网页ppt怎么弄成自己的ppt?  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤  Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】  浅谈javascript alert和confirm的美化  Bootstrap整体框架之CSS12栅格系统  java获取注册ip实例  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】  Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册  音响网站制作视频教程,隆霸音响官方网站?  javascript中对象的定义、使用以及对象和原型链操作小结  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  如何在新浪SAE免费搭建个人博客?  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  潮流网站制作头像软件下载,适合母子的网名有哪些?  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  如何生成腾讯云建站专用兑换码?  Laravel distinct去重查询_Laravel Eloquent去重方法  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  Laravel如何处理表单验证?(Requests代码示例)  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  BootStrap整体框架之基础布局组件  微信小程序 canvas开发实例及注意事项  Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全  Laravel用户密码怎么加密_Laravel Hash门面使用教程  Laravel如何处理文件下载请求?(Response示例)  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  韩国服务器如何优化跨境访问实现高效连接?  UC浏览器如何设置启动页 UC浏览器启动页设置方法  如何快速查询网址的建站时间与历史轨迹?  浅述节点的创建及常见功能的实现  JS去除重复并统计数量的实现方法  Laravel如何与Docker(Sail)协同开发?(环境搭建教程)  Linux后台任务运行方法_nohup与&使用技巧【技巧】  大同网页,大同瑞慈医院官网?  网站页面设计需要考虑到这些问题  如何在建站之星网店版论坛获取技术支持?  Laravel如何创建自定义Facades?(详细步骤)  如何在服务器上配置二级域名建站?  如何在万网ECS上快速搭建专属网站?  千库网官网入口推荐 千库网设计创意平台入口  Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】