연관된 행 저장..? 1 10 1,292

by 헨씀히포 [SQL Query] [2012.12.10 16:32:05]



테이블 A :
<pre>
번호  메모 부모 순서
no    memo    ref     order
1   AA    1    1
2   AA-1     1    2
3   AA-1-1   2    3
4   AA-2     1    2
5   AA-2-1   4     3
</pre>
테이블 B는  A 와 구조가 똑같습니다

예를 들어서 행번호 4를 선택하면 4와 연관된 데이타(1, 4,5)를 모두 B테이블에 저장하고 싶은데 어떻게 하면 될까요?
정말 모르겟네요
부탁드리겠습니다
위 테이블 구조를 예쁘게 적을려고 해도 안되네요
엉망으로 글이 적어지네요
by 까망소 [2012.12.10 16:38:05]

CS응용프로그램 이벤트 처리? 또는 웹페이지 ON-CLICK() 이벤트 인가요?
선택된 행의 ref값을 질의하여 insert하는 문장을 작성하시려는 걸 의도하시는 건지...


by 마농 [2012.12.10 17:17:24]
INSERT INTO b
-- 4번부터 계층구조 역탐색(하위에서 상위로)
SELECT *
  FROM t
 START WITH no = 4
 CONNECT BY no = PRIOR NULLIF(ref, no)
 UNION ALL
-- 4번 밑으로 계층구조 탐색(상위에서 하위로)
SELECT *
  FROM t
 START WITH ref = 4
 CONNECT BY NOCYCLE PRIOR no = ref
;

by 아발란체 [2012.12.10 17:20:18]
--":FIND_VAL" 부분에 행번호 4의 메모값 "AA-2"를 대입하면 1, 4, 5행 값이 테이블B에 들어갑니다.
INSERT INTO
  TABLE_B
SELECT 
  NO,
  MEMO,
  REF_NO,
  ORDER_NO
FROM
  TABLE_A
WHERE
  MEMO = SUBSTR(:FIND_VAL, 0, 2) OR MEMO LIKE :FIND_VAL||'%';

by 아발란체 [2012.12.10 17:25:15]

메모 계층 구조가 AA-AA까지만 처리가 됩니다.
그리고 ORDER와 REF는 예약어라 뒤에 "_NO"를 넣었습니다 ~ :)


by 아발란체 [2012.12.10 17:28:10]

검색 계층이 2 Depth 이상 또는 정해지지 않았다면 마농님 것이 진리~


by 헨씀히포 [2012.12.10 18:00:12]

오마이갓  정말 감사드립니다
두분다 정말 감사드려요
복 받으실거에요
아주 잘됩니다
감사합니다


by 까망소 [2012.12.10 18:04:35]

아... 경험과 생각이 부족하다보니 많이 배우게 됩니다.
마농님, 아발란체님
감사합니다. ^^


by 헨씀히포 [2012.12.10 18:05:20]
 

그런데 한가지 더 질문 드릴께요
B테이블에 제일 상위 데이타(5번을 선택하면 제일 상위가 1번이죠)가 이미 B테이블에 잇으면 에러가 나던데
B테이블에 잇는건 빼고 저장할려면 위 쿼리에서 어떻게 바꿔야하나요?
부탁드리겟습니다


by 마농 [2012.12.10 18:34:12]
MERGE INTO b
USING
(
SELECT *
  FROM t
 START WITH no = 4
 CONNECT BY no = PRIOR NULLIF(ref, no)
 UNION ALL
SELECT *
  FROM t
 START WITH ref = 4
 CONNECT BY NOCYCLE PRIOR no = ref
) a
ON (a.no = b.no)
WHEN NOT MATCHED THEN
INSERT VALUES(a.no, a.memo, a.ref, a.order)
;

by 헨씀히포 [2012.12.10 21:14:55]

정말 마술같아요
불가능을 가능으로 해주시네요
대단하십니다
감사드리겟습니다
짱~~~~~~!

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