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, 
   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. 그룹 by를 사용하여 무겁게 하고, 뒤에 있는 열을 따라 어떤 열을 무겁게 한다.
위에서 말한 것은 편집자가 여러분께 소개한 mybatis와 같은 표를 여러 번 연결하여 같은 열의 값을 조회하는 문제입니다. 여러분께 도움이 되었으면 합니다. 만약에 궁금한 것이 있으면 저에게 메시지를 남겨 주십시오. 편집자는 제때에 여러분에게 회답할 것입니다.여기에서도 저희 사이트에 대한 지지에 감사드립니다!

좋은 웹페이지 즐겨찾기