[SOS]update할때 0 2 1,410

by abysseye [Oracle 기초] [2014.02.20 15:09:38]



table1 (id,지역코드,연도) /table2(id,지역코드,연도)/table(지역코드,연도) 이런정보를 가지고 있는
세개의 테이블에서요

--- TABLE2의 연도는 크게 의미는 없습니다. 하지만 UPDATE후에
TABLE1의 지역코드,연도와 TABLE3의 지역코드,연도와 같아야 합니다.)---

table1의 지역코드는 비어있는데 이곳에 table2의 id가 같은에 지역코드를 update하려고 합니다.
(table2의 지역코드가 연도가 table3의 지역코드와 연도가 존재하고 있으면 table1에 넣어주는 )

***************************************
merge into (
select * from table1 ) r
using (
select * from table2 a
where exsits( select 1 from table3 b
 where a.연도=b.연도
   and a.지역=b.지역)
)s
on (r.id=s.id)
when matched then
update
set r.지역코드=s.지역코드
;
***************************************************


이렇게 작성했는데요...
결과에서 table1의 지역코드가 빈 곳이 있어서

*************************************************************************************************
select a.id,a.지역코드,a.연도, b.id,b.지역코드,b.연도 from table1 a, table2 b
where a.id=b.id
and a.지역코드 is null
***************************************************************************************************
로 비교했는데요..

결과가 이런식으로 나온값들이 있어요.
=============================================
a.id, a.지역코드, a.연도,  b.id, b.지역코드, b.연도
==============================================
NO23   NULL   2011  NO23     44700  2013

-->44700을 TABLE3에서 검색하면 2011년도에 44700으로 존재하고 있음..
->44700을 TABLE1의 지역코드에 삽입 하려고 함

TABLE2의 지역코드를 table3에 가서 검색하면 같은 연도에 존재하고 있는데..
왜 table1에는 null값으로 나올까요? (TABLE2의 연도는 크게 신경안써도 되구요 
B에 지역코드가 존재하면 그걸 TABLE1 지역코드에 넣기전에 
TABLE3에서 같은연도에 같은지역코드가 존재하고 있으면 채워주는건데..
제 설명이 넘 복잡한가요??)


 where exsits( select 1 from table3 b
  where a.연도=b.연도
   and a.지역=b.지역) 부분은 생략해주는게 더 정확할까요??



글로 설명하자니 어렵네요 캡쳐를 하자니 외부망과 내부망이 분리가 되어있어서 ㅠ.ㅠ
by 빈이 [2014.02.21 17:04:10]

이런식으로 하면 될거 같은데요. TAB2의 ID가 UNIQUE 하다면 문제 없을거 같습니다.
테스트 해보세요.

UPDATE TAB1 T1
SET T1.지역코드 =
(SELECT T2.지역코드 FROM TAB2 T2, TAB3 T3 WHERE T2.지역코드 = T3.지역코드 AND T2.연도 = T3.연도 AND T1.ID = T2.ID)
WHERE T1.ID IN
(SELECT T2.ID FROM TAB2 T2, TAB3 T3 WHERE T2.지역코드 = T3.지역코드 AND T2.연도 = T3.연도) ;


by abysseye [2014.02.24 08:58:31]
답변 정말 감사합니다~~~테스트 해볼게요 
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입