오류 메시지를 보면 “Table ‘mywork.dept_mgr’ doesn’t exist”라고 나와 있습니다. dept_mgr이 존재하지 않는다는 뜻이죠. dept_mgr이라는 서브쿼리를 파생 테이블로 분명히 만들었는데 왜 존재하지 않는다고 할까요? 이유는 dept_mgr이라는 파생 테이블을 또 다른 파생 테이블인 sal 서브쿼리 내부에서 참조하기 때문입니다.
여러 개의 파생 테이블을 사용할 때 각 파생 테이블을 메인쿼리에서는 참조할 수 있지만, 하나의 파생 테이블을 또 다른 파생 테이블의 서브쿼리에서는 참조할 수 없습니다. 하지만 CTE는 다릅니다.
코드 11-3
WITH dept_mgr AS
(SELECT emp_no, dept_no
FROM dept_manager
WHERE SYSDATE() BETWEEN from_date AND to_date
),
sal AS
(SELECT a.emp_no, a.salary, b.dept_no
FROM salaries a, dept_mgr b
WHERE SYSDATE() BETWEEN a.from_date AND a.to_date
AND a.emp_no = b.emp_no
)
SELECT a.dept_no, a.dept_name, sal.emp_no, sal.salary
FROM departments a, sal
WHERE a.dept_no = sal.dept_no;
실행결과