T SQL 과 안시 SQL 아우터 조인이 결과가 다릅니다. 0 1 1,375

by 유환 [SQL Query] [2020.03.28 14:51:24]


안녕하세요. 안시와 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 

by 마농 [2020.03.30 07:53:44]

점색조건은 WHERE 절에
조인조건은 ON 절에
a.comp_id = '123' 은 ON 절이 아닌 WHERE 절에 적어줘야 합니다.
WHERE 절에 적어 주면 a 테이블 중 comp_id 가 '123' 인 것만 검색됨
ON 절에 적어 주면 a 테이블 전체가 검색됨. comp_id 가 '123' 인 것만 b 를 조인하여 출력(a는 전체 출력)

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)
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입