계층형 쿼리에 대해 질문을 드립니다.
본문
안녕하세요.
쿼리라고는 단순히 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