Database/Oracle

[Oracle]UPDATE JOIN 사용하기

  • -
반응형

특정 테이블의 UPDATE문을 실행할 때 다른 테이블과 조건을 걸어 값을 바꿔야 하는 경우가 있습니다.

MySQL에서는 아래와 같이 UPDATE문에 JOIN을 걸어 사용이 가능합니다.

UPDATE STUDENT A 
       INNER JOIN SCHOOL B
          ON A.SCHOOL_NO = B.SCHOOL_NO
   SET A.CONTACT_NUMBER = B.SCHOOL_NUMBER
 WHERE A.SCHOOL_NO = 1
   AND A.CONTACT_NUMBER IS NULL;

쿼리는 학생의 연락처가 비어 있는 경우, 같은 학교 번호를 가진 SCHOOL 테이블에서 학교 전화번호를 학생의 연락처로 업데이트하는 작업을 수행합니다.

 

Oracle에서는 UPDATE .. JOIN 구문을 제공하지 않기 때문에 위 쿼리를 Oracle에서 작성하게 된다면 다음과 같이 할 수 있습니다.

 

1. 서브쿼리 사용

UPDATE STUDENT A
SET A.CONTACT_NUMBER = (
    SELECT B.SCHOOL_NUMBER
    FROM SCHOOL B
    WHERE A.SCHOOL_NO = B.SCHOOL_NO
)
WHERE A.SCHOOL_NO = 1
  AND A.CONTACT_NUMBER IS NULL;

서브쿼리를 사용하여 SCHOOL 테이블에서 SCHOOL_NO가 동일한 레코드의 SCHOOL_NUMBER 값을 가져옵니다. 이 값이 A.CONTACT_NUMBER에 설정됩니다.

 

2. Merge문 사용

MERGE INTO STUDENT A
USING SCHOOL B
ON (A.SCHOOL_NO = B.SCHOOL_NO 
AND A.SCHOOL_NO = 1 
AND A.CONTACT_NUMBER IS NULL)
WHEN MATCHED THEN
UPDATE SET A.CONTACT_NUMBER = B.SCHOOL_NUMBER;

ON 절을 통해 SCHOOL_NO가 같은 경우에 두 테이블의 레코드를 일치시키도록 합니다. 그리고 WHEN MATCHED THEN 을 통해 조건을 만족하는 레코드가 있을 때 업데이트를 수행합니다.

 


+ 피드백은 언제나 환영입니다 :)

 

 

 

 

반응형

'Database > Oracle' 카테고리의 다른 글

[Oracle]ORA-01861: literal does not match format string  (0) 2024.09.13
[Oracle]날짜 영문 표기  (0) 2021.01.14
[Oracle]계층형 쿼리(START WITH ~ CONNECT BY PRIOR)  (0) 2019.11.21
[Oracle]LAG, LEAD  (0) 2019.03.14
[Oracle]공백 제거  (0) 2018.09.28
Contents

포스팅 주소를 복사했습니다.

이 글이 도움이 되었다면 공감 부탁드립니다.