안녕하세요.
하위부서의 사용자를 얻어오고 싶은데 어떻게 처리를 해야할지 감이 잡히지 않아 질문을 드리게 되었습니다.
우선 테이블 구조는 부서 테이블과 사용자 테이블이 존재합니다.
-부서 테이블
부서코드 | 상위부서 코드 |
001 | |
002 | 001 |
003 | 002 |
004 | 001 |
005 | 004 |
- 사용자 테이블
사용자 | 부서코드 |
A | 001 |
B | 002 |
C | 003 |
D | 002 |
E | 004 |
F | 005 |
예를 들어 위와같은 테이블 구조로 부서정보와 사용자 정보가 존재한다고 했을때,
001 부서에 대해 조회를 하면 하위 부서의 사용자. 즉 A,B.C.D.E.F 사용자를 조회해오고
002 부서에 대해 조회를 하면 하위 부서의 사용자, 즉 B,C,D 사용자를 조회해 오고 싶습니다.
004 부서를 조회하면 E, F 사용자만 조회를 하고요.
어떤식으로 쿼리를 하면 가능하지 문의드립니다.
감사합니다.
-- Oracle -- WITH dept AS ( SELECT '001' deptno, null p_deptno FROM dual UNION ALL SELECT '002', '001' FROM dual UNION ALL SELECT '003', '002' FROM dual UNION ALL SELECT '004', '001' FROM dual UNION ALL SELECT '005', '004' FROM dual ) , emp AS ( SELECT 'A' empno, '001' deptno FROM dual UNION ALL SELECT 'B', '002' FROM dual UNION ALL SELECT 'C', '003' FROM dual UNION ALL SELECT 'D', '002' FROM dual UNION ALL SELECT 'E', '004' FROM dual UNION ALL SELECT 'F', '005' FROM dual ) SELECT e.empno FROM emp e , (SELECT deptno FROM dept START WITH deptno = :v_deptno CONNECT BY PRIOR deptno = p_deptno ) d WHERE e.deptno = d.deptno ;
-- MSSQL -- WITH dept AS ( SELECT '001' deptno, null p_deptno UNION ALL SELECT '002', '001' UNION ALL SELECT '003', '002' UNION ALL SELECT '004', '001' UNION ALL SELECT '005', '004' ) , emp AS ( SELECT 'A' empno, '001' deptno UNION ALL SELECT 'B', '002' UNION ALL SELECT 'C', '003' UNION ALL SELECT 'D', '002' UNION ALL SELECT 'E', '004' UNION ALL SELECT 'F', '005' ) , dept_tmp AS ( SELECT deptno, p_deptno FROM dept WHERE deptno = '002' UNION ALL SELECT c.deptno, c.p_deptno FROM dept_tmp p INNER JOIN dept c ON p.deptno = c.p_deptno ) SELECT e.empno FROM emp e INNER JOIN dept_tmp d ON e.deptno = d.deptno ;