Mysql 계층 구조에서 자식 or 부모 노드 한방 쿼리(Oracle Connect By 흉내내기)


오랜만에 포스팅입니다 ㅠ.ㅠ Oracle에서는 Connect by로 쉽게 해결되는데 Mysql에서는 고생하시는 분 많으 실것 같아서 올립니다

 

Mysql 계층 구조 (Tree 구조)에서

테이블 구조가 아래와 같은 경우

 

 ID PARENT_IDETC 
 1ROOT
 2

CHILD

 32CHILD OF 2 
 42CHILD OF 2
 52

CHILD OF 2

Depth가 깊어 질수록 부모노드를 찾기가 힘들어 진다 . 이럴 경우 특정 자식 노드에서 Root까지의 부모노드를 가져오고 싶은 경우 아래의 쿼리를 사용하면 쉽게 해결된다.

 SELECT @r as _ID,
      (
        SELECT @r := PARENT_ID FROM TABLE WHERE ID = _ID
      ) AS _PARENT_ID, @l := @l + 1 AS level
      FROM (
        SELECT @r := 5
      ) vars, TABLE h
      WHERE @r <> 0
   
     )A, TABLE B

 

결과

 _ID

PARENT_ID LEVEL 
 1  0  1 
 2 1 2
 5 2  3 


'IT노트 > MYSQL' 카테고리의 다른 글

MySQL 백업 및 복원  (0) 2015.03.18
Unblock with 'mysqladmin flush-hosts' 에러시  (0) 2015.03.17
Mysql Character Set 변경 관련  (0) 2015.03.14
mysql 명령어로 접속시도시 발생되는 오류  (0) 2015.03.12
[mysql] function 정보  (0) 2015.03.12
Posted by wychoi
,