시소당
다음 두개의 Table을 생각해보자
매출 Table(sales)
-----------------------
매출일자(ilja)
품목코드(pm_cd)
매출액(amount)
....
품목코드 Table(poommok)
-----------------------
품목코드(pm_cd)
품목구분(pm_gbn)
품목명(pm_nm)
..........
다음과 같은 SQL문장을 생각해 보자
select a.ilja, a.pm_cd, b.pm_nm, a.amount
from sales a, poommok b
where a.pm_cd = b.pm_cd(+) //sale Table에 품목코드가 없는것이 있을수도 있으므로 없더라도 매출로는 잡기위해
and b.pm_gbn(+) IN (10,20) //품목구분이 10또는 20
and a.ilja = '19990505';
Outer Join되는 Column에는 IN,BetWeen,OR, SubQeury등을 사용하지 못하므로
"ORA-01719: outer join operator (+) not allowed in operand of OR or IN"이라는 Error가 난다.
-------
해결책
-------
IN은 OR로 풀리므로 각각의 조건을 =로 하고 Union ALL하는 경우도 있지만 수행속도에 문제가 있으므로
IN-LINE View를 통해 해결한다.
select a.ilja, a.pm_cd, b.pm_nm, a.amount
from sales a, (select pm_cd, pm_gbn, pm_nm
from poommok
where pm_gbn in (10,20)) b
where a.pm_cd = b.pm_cd(+)
and a.ilja = '19990505';
위의예와 같은 경우가 Query자체가 쓸일이 거의 없을지 모르나 개념은 확실히 해둘필료가 있다. 결국 개념은
Outer Join에는 IN을 쓸수없으니 In-Line View를 이용하자는 말이다.