굳이 WITH 문 사용할 필요는 없죠.
인라인뷰 사용해도 마찬가지 입니다.
문제는 조건절이 2dept 로 자동으로 침투해 주느냐가 관건인죠.
11g 테스트 결과 with 나 inlineview 나 동일하게 침투하는 것 확인되네요.
SELECT e.eno , (SELECT dname FROM (SELECT dno, dname FROM dept ORDER BY dname) dept1 WHERE dno = e.dno AND ROWNUM = 1 ) x FROM employee e ;
정렬항목과 추출항목이 동일한 경우 그냥 MIN 을 사용하면 되구요.
정렬항목과 추출항목이 다른 경우엔 다양한 시도를 해볼 수 있겠네요.
-- 1. 집계함수에 KEEP 을 이용 SELECT e.eno , (SELECT MIN(loc) KEEP(DENSE_RANK FIRST ORDER BY dname) FROM dept WHERE dno = e.dno ) x FROM employee e ; -- 2. 적절한 인덱스(dno, dname)가 존재하는 경우 인덱스 힌트를 이용 SELECT e.eno , (SELECT /*+ INDEX(dept 인덱스명) */ loc FROM dept WHERE dno = e.dno AND ROWNUM = 1 ORDER BY dname ) x FROM employee e ;