1. line - join을 사용하는 경우
select subl_store_code
from
(
select A.store_code as subl_store_code,
B.store_code as store_store_code
from tb_inv_dsg_ext A, OUTER tb_store_do B
where A.store_code = B.store_code
)A
where store_store_code IS NULL
group by 1
2. sub-quary를 이용하여 hash anti join을 하는 경우
select store_code
from tb_inv_dsg_ext
where store_code not in
(select /*+ HASH_AJ */ store_code from tb_store_do );
3. 일반 조인을 이용한 quary
select A.store_code as subl_store_code
from tb_inv_dsg_ext A, OUTER tb_store_do B
where A.store_code = B.store_code
and B.store_code IS NULL
group by 1
1, 2의 경우는 올바른 결과가 나오는데 3의 경우는 결과가 제대로
나오지 않습니다.
어떻게 바꾸면 sub-quary, inline view없이 일반 조인을 사용하여 1,
2와 똑같은 결과를 만들 수 있을까요?
3에 having절을 이용하는 것은 쓸데없는 field값을 사용하여야
하므로 좋은 방식은 아닌 것 같습니다.
고수님들의 현명한 조언을 기대합니다.
* 참고로 tb_inv_dsg_ext 에는 primary key가 date_code, goods_code,
store_code가 있고
tb_store_code 에는 primary key가 store_code가
있습니다.
|