같이 테이블 하위데이터값을 상위데이터 값으로 업데이트 0 4 1,018

by 몽키매직 [2018.06.29 11:50:04]


코드 물품명 서울 경기 부산
1 자동차 lv2   lv1
11 현대      
12 기아      
2 자전거 lv3    
3 시계   lv2 lv3
31 오메가      
32 티쏘      

이런 테이블이 있을경우 자동차의 서울값이 lv2가 책정되었을때 하위 코드 '현대','기아'도 lv2로 update 하고 싶습니다.

코드값이 2자리인 데이터는 한자리 코드값의 하위 개념으로 보면 됩니다. 앞한자리가 parent Id 개념.

자전거의 경우는 하위코드 데이터가 없는경우임.

merge into로 on절에 like로 시도했는데 단일행이 아니라고.. 여러 로우 업데이트 오류가 나오드라구요.

코드 물품명 서울 경기 부산
1 자동차 lv2   lv1
11 현대 lv2   lv1
12 기아 lv2   lv1
2 자전거 lv3    
3 시계   lv2 lv3
31 오메가   lv2 lv3
32 티쏘   lv2 lv3
by 우리집아찌 [2018.06.29 12:37:11]

따로 테이블 만들어서 INSERT 하시고 RENAME 하시면 됩니다.


by 마농 [2018.06.29 13:18:34]
-- 1. Update 대상 확인 --
SELECT a.코드, a.물품명
     , b.서울, b.경기, b.부산
  FROM t a
     , t b
 WHERE LENGTH(a.코드) = 2
   AND b.코드 = SUBSTR(a.코드, 1, 1)
;
-- 2. Update --
UPDATE t a
   SET (서울, 경기, 부산)
     = (SELECT 서울, 경기, 부산
          FROM t b
         WHERE b.코드 = SUBSTR(a.코드, 1, 1)
        )
 WHERE LENGTH(a.코드) = 2
;

 


by 몽키매직 [2018.06.29 13:35:14]

아 제가 글을 잘못썼군요 ㅠㅠ

코드 물품명 서울 경기 부산
1 자동차 lv2   lv1
11 현대      
12 기아      
2 자전거 lv3    
3 시계   lv2 lv3
31 오메가 lv1    
32 티쏘      

서울-오메가 에도 값이 들어갈수가 있습니다.

하위데이터의 값은 상위데이터에 상관없이 들어갈수 있는데 상위에 데이터가 있을경우에는 하위 전체 update 이네요.

답변해주신 2.update는 null이 lv1을 지우면서 업데이트 될것같네요.

현재 프로시져 안에 있는건데 걍 커서로 돌리는게 낫겠죠? 저 구문도 커서안에 있는건데 다시 한번 커서로..


by 마농 [2018.06.29 13:40:53]
-- 1. Update 대상 확인 --
SELECT a.코드, a.물품명
     , a.서울, a.경기, a.부산
     , b.서울, b.경기, b.부산
     , NVL2(a.서울, a.서울, b.서울) AS 서울_new
     , NVL2(a.경기, a.경기, b.경기) AS 경기_new
     , NVL2(a.부산, a.부산, b.부산) AS 부산_new
  FROM t a
     , t b
 WHERE b.코드 = SUBSTR(a.코드, 1, 1)
   AND LENGTH(a.코드) = 2
   AND (a.서울 IS NULL OR a.경기 IS NULL OR a.부산 IS NULL)
;
-- 2. Update --
UPDATE t a
   SET (서울, 경기, 부산)
     = (SELECT NVL2(a.서울, a.서울, b.서울)
             , NVL2(a.경기, a.경기, b.경기)
             , NVL2(a.부산, a.부산, b.부산)
          FROM t b
         WHERE b.코드 = SUBSTR(a.코드, 1, 1)
        )
 WHERE LENGTH(a.코드) = 2
   AND (a.서울 IS NULL OR a.경기 IS NULL OR a.부산 IS NULL)
;

 

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