티스토리 뷰

반응형

테이블 T1과 테이블 T2 를 서브쿼리로 조인시 아래와 같은 상황에서 버그로 인해서 데이터가 추출되지 않음.


T1.NAME 컬럼은 CHAR(10)

T2.NAME 컬럼은 VARCHAR(15)


SELECT *

FROM T1

WHERE T1.NAME NOT IN (SELECT NAME

                                   FROM T2

                                   )

;

-- 데이터가 나와야 하는 조건에서도 무조건 NOT FOUND 즉 0 ROWS



SELECT *

FROM T1

WHERE T1.NAME NOT IN (SELECT NAME || ''

                                   FROM T2

                                   )

;

위와 같이  || ''를 추가하면 제대로 나옴. 형변환과 관련되는 것 같은데 어째든 전체 결과 합. 즉 IN, NOT IN이 맞지 않음

버그가 아니라면 문맥상 NOT IN임으로 T1전체 컬럼수가 나와야 하는게 아닐런지..


테스트 결과 IN 에서는 잘 나옴.


반대로 아래와 같이 메인 집합을 T2로 하고 서브쿼리 집합을 T1으로 하면 잘 나옴.

SELECT *

FROM T2

WHERE T1.NAME NOT IN (SELECT NAME

                                   FROM T1

                                   )

;


결론적으로 12.7 버전에서는 조인되는 메인집합의 컬럼 타입이 CHAR 이고 하위집합(서브쿼리)의 컬럼이 VARCHAR 일 

경우 NOT IN으로 조인할 경우. 데이터가 추출되지 않음.


반응형