IT

[oracle] update문 - 다중컬럼 동시 업데이트

생각파워 2020. 2. 3. 15:19

요약

update tmp_table

    set a = d

       , b = e

       , c = f

 

이렇게 하지 말고,

 

update tmp_table

    set (a, b, c) = (d, e, f)

 

이렇게 하면 됩니다.

 

상세

여러개의 컬럼을 동시에 업데이트 해야하는 상황이 있습니다. 

아래와 같은 직원테이블이 있는데,

부서와 전화번호를 바꿔달라는 요청이 들어오는 거죠.

 

기존 테이블 구조

 

바꿔달라는 내용입니다.

세명 모두 다른 부서에 다른 전화번호를 부여받았습니다.

이렇게 돼 있을때, 쿼리를 어떻게 작성해야 할까요?

 

기존에 제가 쓰던 쿼리는 이렇습니다. 

 

update employees a

     set phone = ( select phone

                         from modify_list b

                        where a.id = b.id

                      ),

          dept_nm  = ( select dept_nm

                             from modify_list b

                           where a.id = b.id

                          )

where a.id in ( select id from modify_list)

 

각 컬럼별로 서브쿼리를 하나씩 돌려서 업데이트를 했습니다.

중복이 어마어마하지 않습니까?

아래와 같이 컬럼을 콤마(,)로 구분해서 적어주면

다중컬럼을 업데이트 할 수 있네요.

 

update employees a

     set (phone, dept_nm) = ( select phone, dept_nm

                                         from modify_list b

                                       where a.id = b.id

                                       )

where a.id in ( select id from modify_list)

                 

하나라도 더 알면 손발이 편해지는것 같습니다.

반응형