계층형 쿼리에 대해 질문을 드립니다.

계층형 쿼리에 대해 질문을 드립니다.

QA

계층형 쿼리에 대해 질문을 드립니다.

본문

안녕하세요.

쿼리라고는 단순히 select update insert만 사용해서 간단한 작업만 해왔었는데

막상 단계를 출력해야되는 작업을 맡게되어 막막한 심정에 도움을 좀 요청하고자 합니다.

우선 테이블은 아래와 같은데요...

IDX                mem_id          c_code       rcm_code

26                 master                
10000002        test1               100        
10000003        test2               100          10000002
10000004        test3               100          10000003
10000005        test4               100          10000002
10000006        test5               100          10000002
10000007        test6               100          10000005

10000008        test7               100          10000004

10000009        test8               100          10000006

10000010        test9               100          10000007

10000011        test10              100          10000008

10000012        test11              100          10000003

10000013        test12              100          10000012

 

위와 같이 데이터가 있구요 test2를 조회했을때 rcm_code기준으로 test2의 IDX와 rcm_code가 

같은 데이터 즉, test3, test11 이 나오고 여기서 문제는 test3과 test11의 idx와 rcm_code가 같은

회원까지 조회가 되어야 합니다.....그러니까 test3, test11, test7, test12 이 네개가 나와야 되는거죠...

test3, test4가 1뎁스, test7, test12가 2뎁스가 되는건데 구글링해서 찾아보니 함수를 만들어서

그걸 어떻게 select를 하고 하더라구요.....나름대로 알아보니 간단하지는 않겠지만 도움을 좀 요청합니다......

 

 

 

이 질문에 댓글 쓰기 :

답변 2

잘 모르겠습니다만.. 나름 진행한 부분 올려봅니다.

 

1차) test3, test11 추출


select IDX, mem_id, c_code, rcm_code
  from [table]
 where rcm_code in (select IDX
                      from [table]
                     where mem_id = 'test2')

 

2차) test7, test12 추출


select IDX, mem_id, c_code, rcm_code
  from [table] 
 where rcm_code in (select IDX
                      from [table]
                     where rcm_code in (select IDX
                                          from [table]
                                         where mem_id = 'test2'))

 

==> test3, test11, test7, test12 추출

 

1차, 2차를 각각 출력하여 합치는 방법 또는 union all 쿼리를 사용하는 방법을 생각해 볼 수 있을 듯 합니다.


select IDX, mem_id, c_code, rcm_code
  from [table]
 where rcm_code in (select IDX
                      from [table]
                     where mem_id = 'test2')
 union all 
select IDX, mem_id, c_code, rcm_code
  from [table] 
 where rcm_code in (select IDX
                      from [table]
                     where rcm_code in (select IDX
                                          from [table]
                                         where mem_id = 'test2'))

mysql 에서 계층형 쿼리는 좀 오래된 이슈입니다. 

Oracle 에는 connect by 라는  강력한 계층형 쿼리 명령이 있는데, mysql에는 없으니 이를 대체할 여러 방법들이 나왔습니다.

여러 문서를 보다가 아래글이 도움이 될것 같아 남깁니다.

https://shlee0882.tistory.com/241

 

답변을 작성하시기 전에 로그인 해주세요.
전체 57
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT