728x90
반응형
계층형 구조(Hierarchical Structure) 는
부모와 자식 간의 관계를 깊이로 구분하여 표현하는 것으로 트리구조, 보통 카테고리를 분류나 조직도에 많이 사용된다.
오라클이였으면,
START WITH ... CONNECT BY 를 사용하여 계층형 쿼리를 작성할 수 있다.
문제는 내가 지금 작업해야하는 곳의 DB가 MYSQL 이라는것.....
찾아보다가 발견한 사이트. 덕분에 원하는건 해결했다.
dept_no | dept_name | parent_no |
1 | 부서 | 0 |
2 | 부서1 | 1 |
3 | 부서2 | 1 |
4 | 부서3 | 2 |
내가 가지고 있던 테이블은 위의 표와 같은 식으로 이루어져있고,
내가 필요한 값은 단순하게 dept_no 만 나오면 되는걸로,
dept_no 가 1인 값을 조회하면 그의 자식과 자식의 자식인 2,3,4 의 dept_no가 조회되면 된다.
검색해보면 WITH RECURSIVE 문을 사용하라는 것이 많이 나온다.
그래서 나도 사용해보았지만 안되었다. 왜그럴까 했더니
with recursive cte (dept_no, name, parent_no) as (
select dept_no,
name,
parent_no
from depts
where parent_no = 1
union all
select d.dept_no,
d.name,
d.parent_id
from depts d
inner join cte
on d.parent_no = cte.dept_no
)
select * from cte;
위의 WITH구문은 MySQL 8버전이상부터 사용 가능하다고 한다.
하필 내가 사용하는 MySQL은 버전이 5.7 이하다.
즉 위의 방식은 사용 못한다는 거지..
일단은 여기 설명에 나온 것처럼
SELECT dept_no
FROM (select * FROM depts
order by parent_no, dept_no) depts,
(select @pv := '65') initialization
WHERE find_in_set(parent_no, @pv)
AND length(@pv := concat(@pv, ',', dept_no))
위와 같이 작성하였다.
위에 사이트에선 추천하진 않는 것 같다.
다른 방법이 있는지 더 찾아보아야겠다..
728x90
반응형
LIST
'Database > Mysql' 카테고리의 다른 글
윈도우(Windows)서버에 MYSQL 다른 버전 여러 개 설치하기 (2) | 2023.01.11 |
---|---|
mysql 5.x 버전에서 8.x버전으로 업그레이드 시 JDBC 연동 오류 해결 (0) | 2022.05.19 |
[mysql] mysql 접속 , 사용자 조회 방법 (0) | 2022.03.03 |
[Mysql] 테이블에 데이터 특수기호 입력시 오류 발생 (0) | 2022.01.20 |
[JDBC] mysql 연결할때 다른 인코딩으로 보내기 (0) | 2022.01.15 |