본문 바로가기

DB

join 다중 업데이트

반응형

DB 사용중에 다중 업데이트를 사용해야하는 경우입니다.

고쳐야되는 상황) A테이블에 F_ID가 B테이블의 F_NAME과 같을 경우 B테이블의 F_ID로 전환시켜줘야한다.

A 테이블의 있는 데이터를 B 테이블과 매치되는 경우에 한하여 업데이트를 해야해서 처음에는 MERGE 문을 사용했습니다.

MERGE INTO
    T_SONG A
USING
    T_MEMBER B
ON
    (A.F_ID = B.F_NAME)
WHEN MATCHED
THEN
UPDATE SET A.F_ID = B.F_ID;

이렇게 했더니 오류가 납니다.

[99999][38104] ORA-38104: ON 절에서 참조되는 열은 갱신할 수 없음: "A"."F_ID"

이런식으로 MERGE문은 ON 절에서 참조되는 열은 업데이트에 사용할 수 없다고 합니다.

 

다음 방법으로는 UPDATE의 SUBQUERY를 이용했습니다.

 
UPDATE
    T_SONG A
SET
    A.f_id = (SELECT B.f_id FROM T_MEMBER B WHERE A.F_ID = B.F_NAME)
WHERE EXISTS (
    SELECT
        0
    FROM
        T_MEMBER B
    WHERE
        A.F_ID = B.F_NAME
    )
;

UPDATE의 경우 오류없이 진행됩니다.

왜 똑같이 F_ID를 업데이트하는 것인데 UPDATE만 오류가 안 뜰까요.

반응형

'DB' 카테고리의 다른 글

테이블 생성시 유의사항  (0) 2024.10.17
db 테이블 명세서 작성 쿼리  (0) 2024.10.17
오라클,MySQL 특정 문자 정렬  (0) 2024.10.17
쿼리 조건절 유의점  (0) 2024.08.24
쿼리 속도차이  (0) 2024.03.22