mybatis同一张表多次连接查询相同列赋值问题小结
最近遇到的一些问题总结: 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,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> 以上查询执行结果全部未 推测由于使用同一个表进行连接查询,列名相同,赋值时赋了相同的值。 在网上搜索有看到通过在resultMap中配置 尝试配置resultMap未果。 通过给表查询添加别名将以上查询语句修改如下,解决参数赋值冲突的问题。 SELECT score0.test_id,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同一张表多次连接查询相同列赋值问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |