最近遇到的一些問題總結:
1. MySQL數據庫同一張表做四次左連接查詢數據冗余。
a. mysql數據庫連接查詢
b. mysql表數據去重
a. 使用mybatis強大的resultMap
b. mysql數據查詢別名
數據庫表為
Create Table
1
2
3
4
5
6
7
|
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`) ) |
現在想要查詢近四次考試改名同學的考試情況對比數據,查詢語句如下:
1
2
3
4
5
6
7
8
|
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中:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<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_id
與score2.test_id
添加至查詢結果發現四個id值全部都為id0。
推測由于使用同一個表進行連接查詢,列名相同,賦值時賦了相同的值。
在網上搜索有看到通過在resultMap中配置<collection>
和<asociation>
解決此問題。
嘗試配置resultMap未果。
通過給表查詢添加別名將以上查詢語句修改如下,解決參數賦值沖突的問題。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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同一張表多次連接查詢相同列賦值問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!
原文鏈接:http://blog.csdn.net/lylyyg/article/details/54693520