계층구조 삭제시 연결된 row들 삭제할려고 하는데요. 0 3 1,107

by woni_rang [SQL Query] [2016.12.06 14:56:33]


고수님들 도움 좀 여쭙겠습니다.

select '1' as u_id, '' as uuid  from dual union all
select '4', '1' from dual union all
select '6', '4' from dual union all
select '8', '6' from dual union all
select '9', '8' from dual union all
select '11', '9' from dual union all
select '15', '11' from dual union all
select '17', '15' from dual union all
select '18', '' from dual union all
select '19', ''from dual;

이런식으로 했을 경우 값이

U_ID UUID
1  
4 1
6 4
8 6
9 8
11 9
15 11
17 15
18  
19  

U_ID : 보인 id
UUID : 부모ID

예를 들어 U_ID 8번인 것을 삭제할려고 할때 딸린 식구들을 보면 대대로

UUID가 8번인 row와 부모ID가 8번을 사용하는 U_ID 9번인 row와 다시 또 UUID를 9번으로 사용하는 UID가 11번인 row..

이런식으로 UID8번 밑으로 연결된 UID가 9, 11, 15, 17을 다 찾아서 같이 지울려고 하는데..

잘 모르겠습니다. 도움 좀 부탁드리겠습니다.(__)

 

by 마농 [2016.12.06 15:21:01]
SELECT *    -- 1. 대상 확인.
-- DELETE   -- 2. 삭제.
  FROM t
 WHERE u_id IN (SELECT u_id
                  FROM t
                 START WITH u_id = 8    -- 삭제 할 번호
                 CONNECT BY PRIOR u_id = uuid
                )
;

 


by woni_rang [2016.12.06 15:25:09]

마농님 감사합니다~(__) 원하는 결과입니다. 즐거운 하루 되십시오


by 우리집아찌 [2016.12.06 15:28:30]

delete from 테이블

where u_id in ( select u_id from 테이블

                          start with u_id = '8'

                           connect by prior u_id = uu_id )

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