5. 자주 하는 실수 (Tip)
실수 1: CTE 를 다음 문장에서 쓰려 한다
CTE 는 WITH 가 붙은 한 문장에서만 유효합니다. 예제 3 처럼 다음 문장에서 이름을 부르면 없다는 오류가 납니다. 여러 문장이 공유해야 하면 뷰나 임시 테이블을 씁니다.
실수 2: MSSQL 에서 세미콜론을 빠뜨린다
MSSQL 은 WITH 가 배치 첫 문장이 아니면 앞 문장이 세미콜론으로 끝나야 합니다. 빠뜨리면 WITH 근처에서 구문 오류가 납니다. 그래서 ;WITH c AS (...) 로 시작하는 습관이 굳었습니다.
실수 3: 여러 번 참조하는 CTE 가 매번 다시 계산된다고 믿는다
CTE 를 여러 번 부르면 DB 에 따라 매번 다시 계산될 수도, 한 번 만들어 재사용할 수도 있습니다. MySQL 8.0 은 여러 번 참조된 CTE 를 임시 결과로 만들 수 있지만, 계산 결과가 같다는 것은 보장이지 실행 횟수는 보장이 아닙니다. 무거운 집계라면 실행 계획으로 확인하고, 필요하면 임시 테이블로 분리합니다.
실수 4: MySQL 5.7 이하에서 WITH 를 쓴다
MySQL 은 8.0 부터 WITH 를 지원합니다. 5.7 이하 서버에는 인라인 뷰로 다시 써야 하므로, 배포 대상 DB 버전을 먼저 확인합니다.