오랫만에 질문 드립니다.
특정 테이블에 아래와 같이 데이터가 입력되어 있습니다.
LOC_ID | LOC_LEVEL | PARENT_LOC_ID | LOC_NAME |
1 | 1 | 대한민국 | |
2 | 2 | 1 | 서울 |
3 | 3 | 2 | 종로구 |
4 | 4 | 3 | 매장_1 |
5 | 4 | 3 | 매장_2 |
위와 같이 입력되어 있는 테이블에서 SQL 한방으로 아래와 같이 출력을 하려니 좀 애를 먹네요.
LOC_ID | LOC_LEVEL_1_NAME | LOC_LEVEL_2_NAME | LOC_LEVEL_3_NAME | LOC_LEVEL_4_NAME |
1 | 대한민국 | |||
2 | 대한민국 | 서울 | ||
3 | 대한민국 | 서울 | 종로구 | |
4 | 대한민국 | 서울 | 종로구 | 매장_1 |
5 | 대한민국 | 서울 | 종로구 | 매장_2 |
Oracle에서는 Connect By를 사용하면 어떻게 될것 같은데 MySQL 5.7 버전이라 쉽지 않네요..ㅜㅜ
전체 건수는 약 20만건 정도됩니다.
고수님들의 고견 부탁드립니다.
WITH t AS ( SELECT 1 loc_id, 1 loc_level, null parent_loc_id, '대한민국' loc_name UNION ALL SELECT 2, 2, 1, '서울' UNION ALL SELECT 3, 3, 2, '종로구' UNION ALL SELECT 4, 4, 3, '매장_1' UNION ALL SELECT 5, 4, 3, '매장_2' ) SELECT t1.loc_id loc_id_lv1 , null loc_id_lv2 , null loc_id_lv3 , null loc_id_lv4 , t1.loc_name loc_name_lv1 , null loc_name_lv2 , null loc_name_lv3 , null loc_name_lv4 FROM t t1 WHERE t1.loc_level = 1 UNION ALL SELECT t1.loc_id loc_id_lv1 , t2.loc_id loc_id_lv2 , null loc_id_lv3 , null loc_id_lv4 , t1.loc_name loc_name_lv1 , t2.loc_name loc_name_lv2 , null loc_name_lv3 , null loc_name_lv4 FROM t t1 INNER JOIN t t2 ON t2.parent_loc_id = t1.loc_id WHERE t1.loc_level = 1 UNION ALL SELECT t1.loc_id loc_id_lv1 , t2.loc_id loc_id_lv2 , t3.loc_id loc_id_lv3 , null loc_id_lv4 , t1.loc_name loc_name_lv1 , t2.loc_name loc_name_lv2 , t3.loc_name loc_name_lv3 , null loc_name_lv4 FROM t t1 INNER JOIN t t2 ON t2.parent_loc_id = t1.loc_id INNER JOIN t t3 ON t3.parent_loc_id = t2.loc_id WHERE t1.loc_level = 1 UNION ALL SELECT t1.loc_id loc_id_lv1 , t2.loc_id loc_id_lv2 , t3.loc_id loc_id_lv3 , t4.loc_id loc_id_lv4 , t1.loc_name loc_name_lv1 , t2.loc_name loc_name_lv2 , t3.loc_name loc_name_lv3 , t4.loc_name loc_name_lv4 FROM t t1 INNER JOIN t t2 ON t2.parent_loc_id = t1.loc_id INNER JOIN t t3 ON t3.parent_loc_id = t2.loc_id INNER JOIN t t4 ON t4.parent_loc_id = t3.loc_id WHERE t1.loc_level = 1 ORDER BY 1, 2, 3, 4 ;