하위 부서의 상위 부서를 업데이트 하고 싶습니다. 0 1 3,258

by 허접탱이 [SQL Query] [2023.11.28 23:37:58]


안녕하세요.

 

사용자의 부서가 존재하는데 그 위의 상위 부서들에 대해 값을 업데이트 하고 싶습니다.

예를 들어 사용자의 테이블에 아래와 같이 데이터가 입력 되어있습니다.

사용자 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... 이렇게요.

재귀쿼리로 해볼려고 하는데... 잘 되질않네요.

어떤 방법으로 처리하면 좋을지 문의 드립니다.

감사합니다.

 

by 마농 [2023.11.29 08:47:03]
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
                  )
;

 

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