뷰에 대한 업데이트 쿼리네요.
이를 일반 서브쿼리 형식의 업데이트 쿼리로 바꿔보면
IN 또는 EXISTS 서브쿼리를 이용할 수 있는데요.
UPDATE aaaa a SET a.job_no = '00000' WHERE a.cust_no IN (SELECT b.cust_no FROM bbbb b) ; UPDATE aaaa a SET a.job_no = '00000' WHERE EXISTS (SELECT 0 FROM bbbb b WHERE b.cust_no = a.cust_no) ;
서브쿼리 보다는 조인이 일반적으로 더 성능상 좋구요.
위 쿼리는 상수값으로 업데이트를 하고 있지만
보통 b의 컬럼값으로 업데이트 하는 경우가 더 많죠.
UPDATE aaaa a SET a.job_no = (SELECT b.job_no FROM bbbb b WHERE b.cust_no = a.cust_no) WHERE EXISTS (SELECT 0 FROM bbbb b WHERE b.cust_no = a.cust_no) ;
이 경우엔 동일한 서브쿼리를 두번(set 절, where 절) 사용해야 합니다. 불합리하죠.
다른 DB(MSSQL, MySQL)은 인라인뷰를 사용하지 않고도 조인 업데이트가 가능한데요.
오라클은 이게 불가능합니다.
그래서 조인뷰를 이용한 업데이트를 사용하기도 합니다.
요즘은 서브쿼리를 이용한 업데이트가 속도가 안날 때 머지문을 쓰기도 합니다.
MERGE INTO aaaa a USING bbbb b ON (a.cust_no = b.cust_no) WHEN MATCHED THEN UPDATE SET a.job_no = b.job_no ;