본문 바로가기
Develops/SQL

[ORACLE] 서브쿼리 2 DEPTH 참조 (SubQuery 2 Depth Issue)

by SLOTH91 2024. 3. 24.
반응형

오라클 11g 이하 버전에서는 서브쿼리에서 서브쿼리를 사용할 경우 메인 컬럼을 참조하지 못한다. 

("ORA-00904: 부적합한 식별자" 오류 발생)

11g 이하 버전이 이제는 많이 쓰이진 않겠지만 사용하는 오라클 버전이 낮거나 고려해야 하는 사유가 있는 경우 이중 서브쿼리에서 메인컬럼을 참조하지 않는 방안으로 쿼리를 개선할 필요가 있다. 

 

오라클 12c 이상 예시

SELECT a.empno
     , a.ename
     , a.job
     , a.sal
     , (SELECT ename
          FROM (SELECT aa.ename
                  FROM emp aa
                 WHERE aa.job = a.job
                 ORDER BY aa.sal DESC)
         WHERE ROWNUM = 1) AS max_sal_ename
  FROM emp a
 WHERE a.job IN ('MANAGER', 'SALESMAN')

출처 : https://gent.tistory.com/617

 

반응형

오라클 11g 이하 예시

SELECT a.empno
     , a.ename
     , a.job
     , a.sal
     , (SELECT MAX(aa.ename) KEEP(DENSE_RANK FIRST ORDER BY aa.sal DESC)
          FROM emp aa
         WHERE aa.job = a.job) AS max_sal_ename
  FROM emp a
 WHERE a.job IN ('MANAGER', 'SALESMAN')

 

출처 : https://gent.tistory.com/617

 

 

 

 

 

 

 

[참고]

https://gent.tistory.com/617

반응형