hmk run dev
계층형 쿼리에서 부모 정보 조회 쿼리 (PL/SQL 대신) 본문
PL/SQL 함수를 이용해 부모 row에 대한 정보를 가져오는 쿼리 대신
함수 없이 조회할 수 있는 방법으로 데이터를 조회 해봤다..!
PL/SQL이 좀 더 빠르긴 하지만 이번에 MYSQL 버전 업그레이드 이후로 함수생성 권한을 받는 것도 까다로워 졌고
PL/SQL 문법도 이전 버전과 맞지 않는 부분이 조금있는 것 같아서 시도해본 방법이다...;;
사실 특별한 방법 이랄게 있나 싶다.
PL/SQL로 하던 작업을 여러번의 inner join(부모 row에 대한 정보가 확실할때만)을 이용해 가장 상위부모 row의 데이터를 가지고 오면 된다.
더 효율적인 방법이 있을 것 같은 냄새가 솔솔나는 쿼리다... 일단 적용해놓고 추후에 리팩토링 하기로 했다..!
left join
(
select
// 개편 후 카테고리를 위한 join
ww.work_no as cate_work_no,
ww.category_no,
CASE
WHEN ww.create_date >= '2021-11-08 18:00:00' // 이 날짜 이후로 카테고리 정보가 개편되어 가져오는 방식이 달라짐
THEN concat(wcn.name,'>',wcn.name2,'>', wcn.name3) // 개편후 카테고리 depth > 3
ELSE concat(wc.name,'>',wc.name2,'>', wc.name3,'>', wc.name4,'>', wc.name5) // 개편 전 카테고리 depth > 5
END as cate_path,
ww.create_date
from w_work ww
left join (select
wcn.category_no,
wcn.p_category_no,
wcn.name,
wcn2.name as name2,
wcn3.name as name3
from w_category_new wcn
inner join w_category_new wcn2 on wcn.p_category_no = wcn2.category_no
inner join w_category_new wcn3 on wcn2.p_category_no = wcn3.category_no
) wcn on wcn.category_no = ww.category_no
// 개편 전 카테고리를 위한 join
left join (select
wc.category_no,
wc.p_category_no,
wc.name,
wc2.name as name2,
wc3.name as name3,
wc4.name as name4,
wc5.name as name5
from w_category wc
inner join w_category wc2 on wc.p_category_no = wc2.category_no
inner join w_category wc3 on wc2.p_category_no = wc3.category_no
inner join w_category wc4 on wc3.p_category_no = wc4.category_no
inner join w_category wc5 on wc4.p_category_no = wc5.category_no
) wc on wc.category_no = ww.category_no
) cate on cate.cate_work_no = w.work_no
'mysql' 카테고리의 다른 글
mysql 데이터 백업 (DBeaver) (0) | 2022.01.03 |
---|---|
쿼리 실행계획 Query Plan (0) | 2021.12.27 |
인터페이스에서 QUERY 작성하기 (0) | 2021.11.19 |
PL/SQL 함수 (0) | 2021.11.18 |
char대신 varchar를 사용하는 이유 (0) | 2021.11.17 |
Comments