코드 | 물품명 | 서울 | 경기 | 부산 |
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 |
-- 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) ;