hmk run dev

계층형 쿼리에서 부모 정보 조회 쿼리 (PL/SQL 대신) 본문

mysql

계층형 쿼리에서 부모 정보 조회 쿼리 (PL/SQL 대신)

hmk run dev 2021. 12. 22. 15:59

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