outer join 0 2 1,394

by GKDLDYD [Oracle 기초] [2022.06.28 09:57:32]


select titINsme as 제품명, tbase.pcount as 생산량
rank() over(order by tbase.pcount desc nulls last ) as 생산량_순위
from titem  tit
left outer join
(
select tpr.inumber, sum(tpr.PCount) PCount
from tProduction  tpr
where TO_CHAR(tpr.PDate,'YYYYMM')='202001'
GROUP BY tpr.INumber
) tBASE
ON tit.INUmber = tBase.Inumber
 

이렇게 서브쿼리 형식이면 left outer join 대신 + 를 사용할 수 없나요 ? 

+기호를 사용할 수있는 방법이 있을까요 ?

by 마농 [2022.06.28 10:06:43]

오라클이라면 (+) 기호 사용 가능합니다.
그런데. (+)를 꼭 사용해야만 하나요? LEFT JOIN 을 하면 안되는 이유가 있는지?
그리고. 오라클 맞나요? 구문 오류가 좀 보이는데요?
오라클이라면? FROM 절에서 AS 사용 못합니다.
rank 앞에 컴마(,)도 누락되었네요.
YYYMM 에도 Y 가 하나 누락되었네요.


by 마농 [2022.06.29 09:12:46]

쿼리 수정하셨네요.
- FROM 절 AS 빼셨고
- YYYMM 을 YYYYMM 으로 수정하셨네요.
- RANK 앞에 컴마(,) 만 추가해 주시면 오라클에서도 정상 동작 할 것입니다.
- titINsme 는 tit.IName 의 오타가 아닐까? 생각됩니다.
 

-- ANSI --
SELECT titINsme     AS 제품명
     , tbase.pcount AS 생산량
     , RANK() OVER(ORDER BY tbase.pcount DESC NULLS LAST) AS 생산량_순위
  FROM titem tit
  LEFT OUTER JOIN
       (SELECT tpr.inumber
             , SUM(tpr.PCount) PCount
          FROM tProduction tpr
         WHERE TO_CHAR(tpr.PDate, 'yyyymm') = '202001'
         GROUP BY tpr.INumber
        ) tBASE
    ON tit.INUmber = tBase.Inumber
;
-- Oracle --
SELECT titINsme     AS 제품명
     , tbase.pcount AS 생산량
     , RANK() OVER(ORDER BY tbase.pcount DESC NULLS LAST) AS 생산량_순위
  FROM titem tit
     , (SELECT tpr.inumber
             , SUM(tpr.PCount) PCount
          FROM tProduction tpr
         WHERE TO_CHAR(tpr.PDate, 'yyyymm') = '202001'
         GROUP BY tpr.INumber
        ) tBASE
 WHERE tit.INUmber = tBase.Inumber(+)
;

 

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