안녕하세요.
하위부서의 사용자를 얻어오고 싶은데 어떻게 처리를 해야할지 감이 잡히지 않아 질문을 드리게 되었습니다.
우선 테이블 구조는 부서 테이블과 사용자 테이블이 존재합니다.
-부서 테이블
부서코드 | 상위부서 코드 |
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 사용자만 조회를 하고요.
어떤식으로 쿼리를 하면 가능하지 문의드립니다.
감사합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | -- 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 ; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | -- 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 ; |