본문 바로가기
DataBase/Oracle

오라클 조인 업데이트 (다중업데이트) - Case 1

by Dev. Jkun 2017. 11. 22.
반응형

오라클에서 데이터를 다중 조건에 맞게 업데이트하기 위한 방법중 첫번째.

SET 절과 (WHERE, AND) 조건 절과 동일한 내용으로 업데이트 쿼리를 수행.


샘플 데이터는 다음과 같다.


테이블 : JKUN

위 테이블에서 업데이트 대상은 NUM_1 필드(전체)이다.


이 데이터들을 순번으로 업데이트 할 예정.

다음은 가상 데이터

    SELECT 1 AS RN, 4 AS NUM_SEQ
    FROM DUAL
    UNION ALL
    SELECT 2 AS RN, 5 AS NUM_SEQ
    FROM DUAL
    UNION ALL
    SELECT 3 AS RN, 6 AS NUM_SEQ
    FROM DUAL
    UNION ALL
    SELECT 4 AS RN, 7 AS NUM_SEQ
    FROM DUAL
    UNION ALL
    SELECT 5 AS RN, 8 AS NUM_SEQ
    FROM DUAL

    /* 위 가상 데이터를 지속적으로 인라인 뷰 */

위 데이터들은 NUM_SEQ 를 기준으로 NUM_1 을 수정한다. 이 첫번째 케이스로 업데이트를 수행하기 위해서는 반드시 조건/기준 컬럼이 필요.


UPDATE JKUN
SET NUM_1 = (
  SELECT RN FROM (
    SELECT 1 AS RN, 4 AS NUM_SEQ
    FROM DUAL
    UNION ALL
    SELECT 2 AS RN, 5 AS NUM_SEQ
    FROM DUAL
    UNION ALL
    SELECT 3 AS RN, 6 AS NUM_SEQ
    FROM DUAL
    UNION ALL
    SELECT 4 AS RN, 7 AS NUM_SEQ
    FROM DUAL
    UNION ALL
    SELECT 5 AS RN, 8 AS NUM_SEQ
    FROM DUAL
  ) RRD
  WHERE RRD.NUM_SEQ = JKUN.NUM_SEQ
)
WHERE EXISTS (
  SELECT 1
  FROM (
    SELECT 1 AS RN, 4 AS NUM_SEQ
    FROM DUAL
    UNION ALL
    SELECT 2 AS RN, 5 AS NUM_SEQ
    FROM DUAL
    UNION ALL
    SELECT 3 AS RN, 6 AS NUM_SEQ
    FROM DUAL
    UNION ALL
    SELECT 4 AS RN, 7 AS NUM_SEQ
    FROM DUAL
    UNION ALL
    SELECT 5 AS RN, 8 AS NUM_SEQ
    FROM DUAL
  ) RD
  WHERE NUM_SEQ = JKUN.NUM_SEQ
);

위 쿼리를 서술형으로 풀어서 정리하자면

JKUN 테이블에 있는 NUM_1 컬럼의 값들을 JKUN 테이블의 NUM_SEQ 컬럼과 인라인 뷰의 NUM_SEQ 컬럼과 매칭하여 RN 컬럼 값을 JKUN 테이블의

NUM_1 값들을 일괄적으로 수정.




반응형

댓글