이런 데이터가 바로 계층형 데이터. 


흔히 말하는 사원 테이블이다. 


오라클과 달리 계층형 질의(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로 임의로 사용



결과는 이렇게 나온다. 




+ Recent posts