더북(TheBook)

오류 메시지를 보면 “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;

실행결과

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.