반응형
오라클 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')

반응형
오라클 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')

[참고]
반응형
'Develops > SQL' 카테고리의 다른 글
[ORACLE] SIGN 함수 (양수,음수 구분하기) (0) | 2024.03.26 |
---|---|
[ORACLE] GREATEST, LEAST 함수 (하나의 행에서 최대값, 최소값 구하기) (0) | 2024.03.26 |
[ORACLE] LISTAGG 집계함수 (여러 행을 하나의 값으로 합치기) (2) | 2024.03.24 |
[ORACLE] LPAD, RPAD 함수 (지정한 길이만큼 문자('0', 공백) 채우기) (0) | 2024.03.24 |
[ORACLE] 전역 임시 테이블 (Global Temporary Table) (1) | 2024.03.09 |