더북(TheBook)

9.2.3 LATERAL 파생 테이블

MySQL 8.0.14 버전부터 LATERAL 파생 테이블이라는 기능을 지원합니다. 일단 다음 쿼리를 실행해 봅시다.

코드 9-15

SELECT a.dept_no, a.dept_name,
       mng.emp_no, mng.first_name, mng.last_name
  FROM departments a,
       (SELECT b.dept_no, b.emp_no, c.first_name, c.last_name
          FROM dept_manager b, employees c
         WHERE b.emp_no = c.emp_no
           AND SYSDATE() BETWEEN b.from_date AND b.to_date
           AND a.dept_no = b.dept_no
       ) mng
 ORDER BY 1;

실행결과

코드 9-15는 코드 9-10을 변형한 것인데, 실행하면 오류가 납니다. 오류 메시지에 따르면 WHERE 절에서 a.dept_no라는 칼럼을 알 수 없다고 하는군요. 이는 파생 테이블의 WHERE 절 맨 마지막 조건인 a.dept_no = b.dept_no 부분에서 a.dept_no를 인식하지 못해 발생한 오류입니다. 여기서 a.dept_no는 메인쿼리의 FROM 절에 명시한 departments 테이블에 있는 칼럼인데, 서브쿼리에서는 메인쿼리의 칼럼을 참조하지 못합니다. 따라서 코드 9-10처럼 서브쿼리와의 조인 조건은 메인쿼리의 WHERE 절에 기술해야 합니다.

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