아래의 쿼리는 mysql 8.x 버젼대에서 실행한 내용입니다. (recursive 쿼리를 지원하는)
1. 테이블 생성
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | CREATE TABLE division ( division_code character varying(20) NOT NULL PRIMARY KEY, division_name character varying(20) NOT NULL, upper_division_code character varying(20) NOT NULL ); INSERT INTO division VALUES ('develop_division', '개발본부', ''); INSERT INTO division VALUES ('front_team', '프론트팀', 'develop_division'); INSERT INTO division VALUES ('infra_team', '인프라팀', 'develop_division'); INSERT INTO division VALUES ('back_team', '백엔드팀', 'develop_division'); INSERT INTO division VALUES ('web_part', '웹파트', 'front_team'); INSERT INTO division VALUES ('aos_part', 'AOS파트', 'front_team'); INSERT INTO division VALUES ('ios_part', 'IOS파트', 'front_team'); INSERT INTO division VALUES ('1_part', '1파트', 'back_team'); INSERT INTO division VALUES ('2_part', '2파트', 'back_team'); | cs |
위 코드를 실행하면 sample 데이터를 생성할 수 있으며, 그 데이터는 아래의 구조를 나타낸 데이터입니다.
2. 하향탐색 재귀쿼리 (기준 node 에서 아래 방향으로 탐색)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | -- 하향 탐색 with recursive find_division as ( -- start select division_code, division_name, upper_division_code, 1 as depth from division where 1=1 and division_code = 'develop_division' union all -- repeat select d.division_code, d.division_name, d.upper_division_code, fd.depth + 1 from find_division fd join division d on d.upper_division_code = fd.division_code ) select * from find_division | cs |
- -- start 부분에서는 하향검색을 시작할 노드를 설정하는 부분이다.
- -- repeat 부분에서는 위에서 설정한 초기 값이 재쿼리의 타이틀인 find_division 에 들어가고
그 값을 기준으로 다시 division 을 조인한다. - division 테이블이 하위 코드를 탐색하게 되는 테이블이라 d.upper_division_code 를 fd.division_code 로 연결한다.
결과는 아래와 같다.
3. 상향탐색 재귀쿼리 (기준 node 에서 위 방향으로 탐색)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | -- 상향 탐색 with recursive find_division as ( -- start select division_code, division_name, upper_division_code, 1 as depth from division where 1=1 and division_code = 'web_part' union all -- repeat select d.division_code, d.division_name, d.upper_division_code, fd.depth + 1 from find_division fd join division d on d.division_code = fd.upper_division_code ) select * from find_division | cs |
- -- start 부분에서는 상향검색을 시작할 노드를 설정하는 부분이다.
- -- repeat 부분에서는 위에서 설정한 초기 값이 재쿼리의 타이틀인 find_division 에 들어가고
그 값을 기준으로 다시 division 을 조인한다. - division 테이블이 상위 코드를 탐색하게 되는 테이블이라 d.division_code 를 fd.upper_division_code 로 연결한다.
결과는 아래와 같다.
'분석 > 데이터분석' 카테고리의 다른 글
머신러닝에서 인코딩 방법 (0) | 2024.05.22 |
---|---|
회귀모델의 성과 측정 (0) | 2024.05.22 |
분류모델의 성과 측정 (0) | 2024.02.23 |
[SQL] 월별로 잔존타입별 고객수 계산 (0) | 2024.01.25 |
[BigQuery] 연속된 일자 생성하기 (0) | 2023.10.10 |