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_id
와 score2.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와 같은 표를 여러 번 연결하여 같은 열의 값을 조회하는 문제입니다. 여러분께 도움이 되었으면 합니다. 만약에 궁금한 것이 있으면 저에게 메시지를 남겨 주십시오. 편집자는 제때에 여러분에게 회답할 것입니다.여기에서도 저희 사이트에 대한 지지에 감사드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MySQL/마이바티스 | 동적 쿼리 사용A라는 서비스에 해당하는 테이블을 조인하고 조회하는 데 사용됩니다. 나중에 공통화를 위해 B 및 C 서비스도 추가됩니다. A, B, C 서비스는 모두 단일 쿼리에서 작동할 수 있도록 공통화되어야 합니다. 테이블에 각...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.