[SYBASE IQ] 12.7 서브쿼리 버그
테이블 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으로 조인할 경우. 데이터가 추출되지 않음.