지금 제가 할려는 작업이 table1과 table2의 name,name2의 컬럼값이 같을경우 table1에id컬럼에 table2의 id컬럼값을 update해줄려고합니다.
그래서 원쿼리로 작업을 해봤는데
update table1 a set id = (select distinct id from table2 b where a.name=b.name and a.name2=b.name2)
각테이블마다 데이터가 몇십만건씩 있어서 그런지 40분동안 쿼리수행을해도 update가 완료되지않아
table2의 name컬럼에다가 index를 생성후 loop를돌려봤으나 역시 40분이 지나도록 update가 완료되지않았습니다.
begin for i in( select id,name,name2 from table2 ) loop update table1 set id=i.id where name = i.name and name2=i.name2 ; commit; end loop; end;
이경우 table2에 index를 생성하였으니 table1으로 loop를 돌려 table2의 값을 찾으면 된다고하는데 쿼리를 어떻게 수정해야되는지 감이 안와서
고수님들의 조언을 구해봅니다...
최종 질문과는 크게 상관없으나 ..
업데이트 쿼리에 문제가 있어보입니다.
로직상 검토가 필요할것같네요.
1. pk 구조를 보셔야겠지만 distinct를 걸었다는건 id가 중복되어 조회될수 있겠다 싶습니다. subquery의 결과값이 다수의 row가 출력될경우 해당 구문은 오류가 나옵니다.
2. table2, table1 의 name, name2가 같은경우 update를 table2의 값으로 업데이트 합니다. 현재의 table1, table2의 id가 같아도 update할 필요가 있을까요.
3. table1의 name, name2가 table2에 없을 때 table1의 id는 null로 업데이트 하겠습니다.