update EDU_TARGET_T B set B.REQ_TEMP = (select A.REQ_NO from M_DATA A where B.SIDO=A.SIDO AND B.GUGUN=A.GUGUN AND B.COM_NAME=A.COM_NAME AND B.NAME=A.NAME AND B.BIRTHDAY=A.BIRTHDAY) where exists ( select 1 from M_DATA A where B.SIDO=A.SIDO AND B.GUGUN=A.GUGUN AND B.COM_NAME=A.COM_NAME AND B.NAME=A.NAME AND B.BIRTHDAY=A.BIRTHDAY); 위 쿼리 한번 수행해 보세요. 실제 위와 같은 방식으로 작업한적이 있는데 잘 돌아갈지는 모르겠네요.
1. 동일 중복 건에 대한 중복제거 기준 정립이 필요합니다.
- SQL 작성 이전에 기준정립이 우선입니다.
2. 9i 의 Merge 구문은 구문 생략이 불가하므로 다 적어 줘야 합니다.
- 따라서 Not Matched 구문도 적어줘야 하는데
- 이구문을 안타게 하기 위해서는 Using 절에서 미리 해당 자료를 제거해줘야 합니다.
- 즉 Matched 만 타도록 Using 절을 만들어 주세요.
MERGE INTO edu_target_t b USING ( SELECT b.ROWID AS rid , MIN(a.req_no) AS req_no FROM edu_target_t b , m_data a WHERE b.sido = a.sido AND b.gugun = a.gugun AND b.com_name = a.com_name AND b.name = a.name AND b.birthday = a.birthday GROUP BY b.ROWID ) a ON (b.ROWID = a.rid) WHEN MATCHED THEN UPDATE SET req_temp = a.req_no WHEN NOT MATCHED THEN INSERT(req_temp) VALUES(a.req_no) ;