안녕하세요.
사용자의 부서가 존재하는데 그 위의 상위 부서들에 대해 값을 업데이트 하고 싶습니다.
예를 들어 사용자의 테이블에 아래와 같이 데이터가 입력 되어있습니다.
| 사용자 ID | 부서명 | 부서코드 |
| test | 삼성전기 | 2 |
그리고 부서 테이블이 아래와 같이 있습니다.
| 부서명 | 부서코드 | 상위부서코드 | flag |
| 삼성전자 | 0 | N | |
| 삼성SDI | 1 | 0 | N |
| 삼성전기 | 2 | 1 | N |
| 삼성생명 | 3 | 0 | N |
이런식으로 부서정보가 있다치면,
test 사용자가 존재하는 부서와 그 부서의 상위 부서들의 flag값을 Y로, 사용자가 존재하지 않는 부서는 N으로 업데이트를 하고 싶습니다.
즉 삼성전자, 삼성 SDI, 삼성전기는 flag가 Y, 삼성생명은 flag 가 N... 이렇게요.
재귀쿼리로 해볼려고 하는데... 잘 되질않네요.
어떤 방법으로 처리하면 좋을지 문의 드립니다.
감사합니다.
WITH emp AS
(
SELECT 'test' empno, 2 deptno FROM dual
)
, dept AS
(
SELECT '삼성전자' dname, 0 deptno, null p_deptno, 'N' use_yn FROM dual
UNION ALL SELECT '삼성SDI' , 1, 0, 'N' FROM dual
UNION ALL SELECT '삼성전기', 2, 1, 'N' FROM dual
UNION ALL SELECT '삼성생명', 3, 0, 'N' FROM dual
)
-- 1. 사원이 있는 부서 조회(갱신 대상 확인용) --
SELECT *
FROM dept
WHERE deptno IN (SELECT deptno
FROM dept
START WITH deptno IN (SELECT deptno FROM emp)
CONNECT BY deptno = PRIOR p_deptno
)
;
-- 2. Update --
UPDATE dept
SET use_yn = 'Y'
WHERE deptno IN (SELECT DISTINCT deptno
FROM dept
START WITH deptno IN (SELECT deptno FROM emp)
CONNECT BY deptno = PRIOR p_deptno
)
;