ORACLE SQL

ORACLE SELECT UPDATE 각각의 Key값에 각기 다른 값 SET 하기

쩨비 2023. 7. 11. 08:57
728x90

상황 : 신규 DATE TYPE의 컬럼 추가 이후 신규 컬럼에 Key별로 각기 다른 값을 update 해야 하는 상황

과거 신입때는 select 후 모든 데이터를 내려 받은 후 update문을 만들어 맵핑 작업을 했던 경험이 있고

데이터를 불러들여 엑셀 입력하듯  하는 방법은 있으나 한번에 50row 밖에 붙여넣기가 안되는 상황 발생

데이터를 엑셀방식으로 update

엑셀로 update문을 만들기는 귀찮고 developer를 통해 업데이트를 하자니 한번에 50개밖에 업데이트가 안되고

그런데 developer에 각 row별로 업데이트 치는 기능이 있는것을 보고 혹시 select insert 처럼 update도 select한 값을 각각 update 할 수 있을지 않을까 라는 합리적인 의심을 함

 

그래서 구글링을 한 결과 가능했다.

 

UPDATE 
    (
        SELECT A.A_DT, B.B_DT
        FROM A_TABLE A,
        (
            SELECT 
            A_KEY,  MAX(B_DT) AS B_DT
            FROM B_TABLE
            GROUP BY A_KEY
        ) B
        WHERE
            A.A_KEY = B.A_KEY
        AND A.A_CODE NOT IN ('1', '2', '3')
    )
    SET A_DT = B_DT

* 쿼리 설명 :

- A테이블의 A_DT (신규컬럼)

- A테이블과 B테이블의 KEY 컬럼: A_KEY

- A테이블의 A_KEY값과 B테이블의 A_KEY값이 매칭되는 B_DT의 최고 값을 A테이블의 A_DT에 업데이트