안녕하세요. 안시와 TSQL 결과가 다르게 나와서 질문 드립니다.
T-SQL로 쿼리 작성시 아우터 걸린 테이블을 다른 테이블과 또 아우터 걸때 포괄조인 조류나서
인라인뷰로 만들고 조인하고 이런 작업이 복잡도 하고 해서 안시 SQL로 해보려는대
결과가 다릅니다;;
유니온올 2번째 LEFT OUTER JOIN 이 건수가 더 많이 나오는대요..
2번째도 1번째 처럼 인라인뷰로 만들어서 아우터 조인하면 결과는 동일하긴 합니다만,
왜 2번째 처럼 하면 결과가 더 많이 나올까요?
ON 절 안에서 아우터가 아닌 테이블에 조건을 주면 무시하던대 이것때문 그런가요???
SELECT COUNT(1) -- 100건
FROM (SELECT A.LVL_CD1
, A.LVL_CD2
, A.LVL_CD3
, A.COMP_ID
, B.CORP_CD
FROM BASP_AMT A
, BASP_AMT_DTL B
WHERE A.COMP_ID = '123'
AND A.COMP_ID = B.COMP_ID(+)
AND A.PRC_CD = B.PRC_CD(+)
) A
, BASP_INFO B
WHERE1=1
AND A.COMP_ID = B.COMP_ID(+)
AND A.CORP_CD = B.CORP_CD(+)
AND A.LVL_CD1 = B.LVL_CD1(+)
AND A.LVL_CD2 = B.LVL_CD2(+)
AND A.LVL_CD3 = B.LVL_CD3(+)
UNION ALL
SELECT COUNT(1) -- 110 건
FROM BASP_AMT A
LEFT OUTER JOIN BASP_AMT_DTL B
ON ( A.COMP_ID = '123'
AND A.COMP_ID = B.COMP_ID
AND A.PRC_CD = B.PRC_CD
)
LEFT OUTER JOIN BASP_INFO G
ON (
B.COMP_ID = G.COMP_ID
AND B.CORP_CD = G.CORP_CD
AND A.LVL_CD1 = G.LVL_CD1
AND A.LVL_CD2 = G.LVL_CD2
AND A.LVL_CD3 = G.LVL_CD3
AND B.COMP_ID = '123'
)
WHERE 1=1
점색조건은 WHERE 절에
조인조건은 ON 절에
a.comp_id = '123' 은 ON 절이 아닌 WHERE 절에 적어줘야 합니다.
WHERE 절에 적어 주면 a 테이블 중 comp_id 가 '123' 인 것만 검색됨
ON 절에 적어 주면 a 테이블 전체가 검색됨. comp_id 가 '123' 인 것만 b 를 조인하여 출력(a는 전체 출력)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | SELECT * FROM basp_amt a LEFT OUTER JOIN basp_amt_dtl b ON a.comp_id = b.comp_id AND a.prc_cd = b.prc_cd -- AND a.comp_id = '123' -- (X) LEFT OUTER JOIN basp_info g ON b.comp_id = g.comp_id AND b.corp_cd = g.corp_cd AND a.lvl_cd1 = g.lvl_cd1 AND a.lvl_cd2 = g.lvl_cd2 AND a.lvl_cd3 = g.lvl_cd3 -- AND b.comp_id = '123' -- 불필요 WHERE 1=1 AND a.comp_id = '123' -- (O) ; |