본문 바로가기

Oracle

update 처리


하지만 오라클등 또 다른 일부 DB들은 update문 자체의 from절에서의 join을 허용하지 않습니다.

그래서 특히 오라클DB를 사용하는 유저들은 update시 이런 문제를 일반적으로 아래와 같이 풉니다.

편의상 간략화하여 제시해 드리니 아래 구문에 맞춰서 직접변경하여 구현 해 보세요~~

 

UPDATE a

SET (a.code, a.col1, a.col2, a.col3) =

        (SELECT code1, col1, col2, col3 --> SET의 괄호안의 컬럼들과 대치되는 순서로 나열해야 함

         FROM(

                    SELECT  group-keys AS code1, sum(a) AS col1, sum(b) AS col2, sum(c) AS col3 

                    FROM B, C

                    WHERE 조인조건

                     GROUP BY group-keys

                   ) bc

          WHERE bc.조인키 = a.조인키

        )

WHERE a테이블 자체의 update대상범위 추출조건

AND EXISTS

        (SELECT 1

         FROM(

                    SELECT  group-keys 

                    FROM B, C

                    WHERE 조인조건

                     GROUP BY group-keys

                   ) bc

          WHERE bc.조인키 = a.조인키

        ) --> 이 조건을 안쓰면 Join과 관계없는 엉뚱한 row들도 Null로 Update되니 반드시 써야합니다.