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.지역) 부분은 생략해주는게 더 정확할까요??
글로 설명하자니 어렵네요 캡쳐를 하자니 외부망과 내부망이 분리가 되어있어서 ㅠ.ㅠ