2016년 7월 11일 월요일

left outer join 시 조건

규칙 LEFT OUTER JOIN 시 ON 절에서는  
우측(널값으로 채워지는 쪽)의 추가 제약조건을 넣고 
좌측의 추가 제약조건은 WHERE절에 넣어야 한다. 

1. 원하는 결과값 
SELECT *  --(184개 행 적용됨)
FROM TBHZM200 AS A LEFT OUTER JOIN MST_TKT_STA_STOCK AS B 
ON  a.Extn_Sta_No = b.Extn_Sta_No   
AND B.Oper_DT = '20090713'    <-- 우측의 추가 제약조건
WHERE A.Transp_Oper_Org_CD = '1'   <-- 좌측의 추가제약조건

2. 잘못된 예 -- INNER JOIN의 결과가 나오게 됨.
SELECT *  --(176개 행 적용됨)
FROM TBHZM200 AS A LEFT OUTER JOIN MST_TKT_STA_STOCK AS B
ON  a.Extn_Sta_No = b.Extn_Sta_No  
AND  A.Transp_Oper_Org_CD = '1' 
WHERE b.Oper_DT = '20090713'     
3. 잘못된 예
 SELECT * --(503개 행 적용됨)
 FROM TBHZM200 AS A LEFT OUTER JOIN MST_TKT_STA_STOCK AS B
 ON  a.Extn_Sta_No = b.Extn_Sta_No  
 AND B.Oper_DT = '20090713'                 <--둘다 ON 절에 위치함.
 AND A.Transp_Oper_Org_CD = '1'


4. 잘못된 예
 SELECT * --(176개 행 적용됨)
 FROM TBHZM200 AS A LEFT OUTER JOIN MST_TKT_STA_STOCK AS B
 ON  a.Extn_Sta_No = b.Extn_Sta_No  
 WHERE B.Oper_DT = '20090713'    <--둘다 where절에 위치
 AND A.Transp_Oper_Org_CD = '1'