조인을 포함한 업데이트하는 방법

소개



특정 테이블을 업데이트 할 때 여러 테이블을 연결하여 수행하고 싶습니다.
그 방법을 조사해 실천했을 때에 조금은 멈추었으므로 메모.

UPDATE



우선 통상의 갱신 처리의 기재 방법을 얹어 둡니다.
UPDATE
 更新対象テーブル
SET
 更新項目 = 値
WHERE
 検索条件

INNER JOIN 이용



조인하는 방법으로 INNER JOIN이 있습니다.
ORACLE의 경우 UPDATE 절에 JOIN을 쓸 수 없으므로 하위 쿼리에서 수행해야합니다.

예를 들어 아래의 두 개의 테이블이 있다고 가정합니다.

[TBL01]


CD
NAME
GROUP
UPD_FLG


0001
다나카
정보 시스템
1

0002
사토
인프라
0

0003
사이토
정보 시스템
1


[TBL02]


CD
GROUP


0001
시스템 개발부

0002
인프라

0003
시스템 솔루션


■이번에 하고 싶은 일
TBL01.CD와 일치하는 TBL02.CD 레코드의 TBL02.GROUP 값으로 TBL01.GROUP을 갱신합니다.
갱신 대상은 TBL01.UPD_FLG가 1인 레코드입니다.
UPDATE
(
 SELECT
  T1.GROUP GROUP01,
 T1.UPD_FLG UPD_FLG01,
  T2.GROUP GROUP02
 FROM
  TBL01 T1
 INNER JOIN
  TBL02 T2
 ON
  T1.CD = T2.CD
)
SET
 GROUP01 = GROUP02
WHERE
 UPD_FLG01 = 1


실행 결과는 다음과 같습니다.
[TBL01]


CD
NAME
GROUP
UPD_FLG


0001
다나카
시스템 개발부
1

0002
사토
인프라
0

0003
사이토
시스템 솔루션
1


주의



위의 방식으로
업데이트할 레코드가 고유하지 않으면 오류가 발생합니다.
ORA-01779:キー保存されていない表にマップする列は変更できません。

따라서 고유하지 않은 것으로 알려진 것에 대해서는이 처리를 사용할 수 없습니다.
(일의로도 이 에러가 발생할 수 있다고도 듣습니다만…)

MERGE 문 사용



위의 방법을 사용할 수 없잖아. 되었기 때문에 다른 방법을 조사하면 MERGE 문이라는 것이있었습니다.
MERGE 문은 INSERT와 UPDATE를 동시에 수행할 수 있습니다.
UPDATE만 가능합니다.
MERGE INTO
 更新対象テーブル
USING
 更新対象データのソース
ON
 結合条件
WHEN MATCHED THEN UPDATE SET
 更新項目 = 値

위 표의 예에서 설명합니다.
MERGE INTO
 TBL01 T1
USING 
(
 SELECT
  CD,
  GROUP
 FROM
  TBL02
)T2
ON
(
 T1.CD = T2.CD
)
WHEN MATCHED THEN UPDATE SET
 T1.GROUP = T2.GROUP

이 경우에도 이전의 INNER JOIN과 비슷한 결과를 얻을 수 있습니다.

주의



위의 방식으로
ON 절에 갱신 항목을 지정할 수 없습니다.
위의 예라면 T1.CD를 업데이트하고 싶습니다. 그렇다면 ON 절의 조건을 다시 생각해야합니다.
ORA-38104: ON句で参照する列は更新できません:XXXXXX



제 경우 INNER JOIN 방법, MERGE 문 방법 모두 사용할 수 없어 곤란 해졌습니다.
무리하게 결합하지 않고 SELECT ~ FROM ~ WHERE EXISTS ~를 사용하여 원하는 업데이트 데이터를 얻을 수있었습니다.
그 예는 또 별도 메모하려고합니다.

참고서



SQL도 다양한 참고서가 나와 있습니다.

· 일러스트로 이해 SQL 처음 입문



일러스트로 이해 SQL 처음 입문 【전자 서적】 [아사이 아츠시]
가격 : 2,398 엔 (2020/11/25 14:11 시점)

・깨끗이 아는 SQL 입문 제2판 드릴 222문부!


깨끗이 아는 SQL 입문 제2판 드릴 222문부! 【전자 서적】[ 나카야마 청장 ]
가격 : 3,080 엔 (2020/11/25 14:13 시점)

・SQL 제2판 제로부터 시작하는 데이타베이스 조작


SQL 제2판 제로부터 시작하는 데이타베이스 조작【전자 서적】[ 믹 ]
가격 : 2,068 엔 (2020/11/25 14:17 시점)

아마존은 여기

좋은 웹페이지 즐겨찾기