하위부서의 사용자를 얻어오고 싶습니다. 0 3 2,179

by 허접탱이 [2020.09.06 22:23:03]


안녕하세요.

 

하위부서의 사용자를 얻어오고 싶은데 어떻게 처리를 해야할지 감이 잡히지 않아 질문을 드리게 되었습니다.

우선 테이블 구조는 부서 테이블과 사용자 테이블이 존재합니다.

-부서 테이블

부서코드 상위부서 코드
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 사용자만 조회를 하고요.

 

어떤식으로 쿼리를 하면 가능하지 문의드립니다.

감사합니다.

by 마농 [2020.09.07 07:50:38]
-- 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
;

 


by 허접탱이 [2020.09.07 09:35:23]

마농님.. 소중한 답변 감사합니다.

제가 실수로 MSSQL이란걸 말씀 안드렸네요.

죄송하지만 해당 쿼리를 MSSQL로 할려면 어떻게 해야할까요?


by 마농 [2020.09.07 10:08:36]
-- 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
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입