조인을 포함한 업데이트하는 방법
소개
특정 테이블을 업데이트 할 때 여러 테이블을 연결하여 수행하고 싶습니다.
그 방법을 조사해 실천했을 때에 조금은 멈추었으므로 메모.
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 시점)
아마존은 여기
Reference
이 문제에 관하여(조인을 포함한 업데이트하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/46bi_ru/items/f362b7c9044fffcb7eea텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)