programming study/D-MySql

20220807-mysql-mybatis join on에 조건문 넣었을 때 조건 안먹는 현상..

gu9gu 2022. 8. 7. 02:23
/* 1. JOIN ON()에 조건문을 넣은 경우 --> MYBATIS에서 안먹을 때 있음 */
SELECT B.SETUP_BAL
FROM   TPT A
       INNER JOIN TPT_SETUP B ON (B.TPT_NO = A.TPT_NO AND A.CODE = '01')


/* 2. WHERE에 조건문을 넣은 경우 ----> 정상 */
SELECT A.USER_NO
FROM   TPT A
       INNER JOIN TPT_SETUP B ON (B.TPT_NO = A.TPT_NO)
WHERE  A.CODE = '01'
  • 1번처럼 B로 설정한 테이블 JOIN ON()에 A에 관련된 조건을 넣으면 MYBATIS에서 적용 안되는 현상 확인.
  • DBEAVER 툴에서는 정상 작동함 확인.
  • 2번처럼 WHERE 조건문에 넣어주면 조회됐음.

 

 

 

정확히 join on으로 인한 조회 결과가 뭔지는 모르겠으나 

dbeaver 툴(mysql)에서 아래와 같은 전체 쿼리를 실행했을 때는 정상 조회됨.

스프링 부트에서 마이바티스로 쿼리 조회 결과는 0개.

/*MYBATIS에서 문제 있었던 전체 쿼리(대충 비슷한 형태로 보여줬고 실제로는 정렬해서 동적쿼리 포함 300줄정도 )*/


SELECT A.*,B.*
FROM USER A
     INNER JOIN	USER_AUTH B ON ( B.USER_NO = A.USER_NO)
     INNER JOIN	USER_.... C ON ( C.USER_NO = A.USER_NO)
     INNER JOIN  ....
WHERE 1=1
AND EXISTS (SELECT 1
            FROM USER_GOODS SS1
            WHERE SS1.USER_GOODS_NO = A.USER_GOODS_NO)
<if test = "type = 'typeA'">
AND 'N' = (SELECT B.SETUP_VALUE
           FROM	TPT A
           INNER JOIN TPT_SETUP B ON (B.TPT_NO = A.TPT_NO AND A.CODE = '01'))
</if>
<if>
</if>
.
.
.
.