2016-07-15 1 views
1

SQL 쿼리를 선택 쿼리로 변환하려고합니다. "(+)"이 무슨 뜻인지 설명해 주시겠습니까? 그것은 가입과 같은 것입니까? 이 경우 "not in"을 어떻게 사용할 수 있습니까?oracle SQL에서 구문 쿼리에 액세스하기위한 변환

Select 
lc.LOC, lc.HOME_ZONE, hz.AREA_TYPE, ld.QTY, sk.SKU 

From 
LOC lc, HOMEZONE hz, CONTAINER cn, LOAD ld, SKU sk 

Where 
lc.HOME_ZONE = hz.HOME_ZONE 
and lc.LOC = cn.LOC (+) 
and cn.CONT_NO = ld.CONT_NO (+) 
and ld.PROD_NO = sk.PROD_NO (+) 
and lc.LOC_COLOR_ZONE in ('80', '90', '95', '100') 
and hz.AREA_TYPE in ('211', '231') 
and hz.SECTION_NO not in ('990000'); 

답변

3

(+)은 외부 조인을위한 Oracle 지름길입니다. 예를 들어 다음 두 쿼리는 동일합니다

SELECT * 
    FROM tableA, tableB 
WHERE tableA.idA = tableB.idB(+)   

SELECT * 
    FROM tableA 
     LEFT OUTER JOIN tableB 
     ON (tableA.idA = tableB.idB) 
귀하의 질의는 다음과 같이 ANSI SQL에 다시 작성할 수 있습니다

:

SELECT lc.LOC, 
     lc.HOME_ZONE, 
     hz.AREA_TYPE, 
     ld.QTY, 
     sk.SKU 
    FROM LOC lc 
     INNER JOIN HOMEZONE hz USING (HOME_ZONE) 
     LEFT OUTER JOIN CONTAINER cn USING (LOC) 
     LEFT OUTER JOIN LOAD ld USING (CONT_NO) 
     LEFT OUTER JOIN SKU sk USING (PROD_NO) 
WHERE  lc.LOC_COLOR_ZONE IN ('80', '90', '95', '100') 
     AND hz.AREA_TYPE IN ('211', '231') 
     AND hz.SECTION_NO NOT IN ('990000');