이런 데이터가 바로 계층형 데이터.
흔히 말하는 사원 테이블이다.
오라클과 달리 계층형 질의(SQL)를 지원하지 않는다.
오라클이었으면 START WITH CONNECT BY 로 끝장을 냈을텐데 말이다.
MySQL을 거의 안써본 입장에서 여기저기 찾아보고 테스트해보고 만든 SQL은 다음과 같다.
SELECT @R AS _ID,
(
SELECT @R:= MANAGER_ID ---@R 에 해당하는 EMP_NO의 MANAGER_ID를 가져오면서 @R을 MANAGER_ID로 갱신함
FROM ENC_EMP
WHERE EMP_NO = _ID
) AS _MANAGER_ID
, @L:=@L+1 AS LEVEL --- 계층레벨 표시
FROM ( SELECT @R:=102) VARS --- 시작할 하위 데이터의 EMP_NO를 지정
, ENC_EMP H
, (SELECT @L:=0) LV --- 계층레벨 초기화(초기화하지 않으면 NULL이므로 안나온다)
WHERE @R <> 0
MySQL은 세션변수를 많이 활용하나보다. @ 붙은 변수가 세션변수(해당 세션에서만 임의로 정의하여 쓰는 듯)이고
위 SQL에서는 @R은 MANAGER_ID 와 EMP_NO를 연결하기 위해 _ID 라는 ALIAS로 임의로 사용
결과는 이렇게 나온다.