반응형
오라클 다중 업데이트 입니다.
두 테이블을 조인해서 업데이트를 하는 방법에는 두가지가 있는데 예제를 통해서 확인해 봅시다.
1. 일단 테이블을 생성합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | create table 사람 ( 사람이름 varchar2(200), 계급 varchar2(200), constraint pk_사람 primary key(사람이름) ); create table 재산 ( 사람이름 varchar2(200), 재산이름 varchar2(200), constraint pk_재산 primary key(사람이름, 재산이름) ); | cs |
2. 적당한 데이터를 넣고
1 2 3 4 5 6 7 8 9 | insert into 사람 (사람이름) values ('임꺽정'); insert into 사람 (사람이름) values ('홍길동'); insert into 사람 (사람이름) values ('김선달'); insert into 재산( 사람이름, 재산이름) values('임꺽정', '자전거'); insert into 재산 (사람이름, 재산이름) values('홍길동', '자동차'); insert into 재산 (사람이름, 재산이름) values('김선달', '자전거'); insert into 재산 (사람이름, 재산이름) values('김선달', '자동차'); insert into 재산 (사람이름, 재산이름) values('김선달', '집'); | cs |
3. 첫번째 멀티 조인 업데이트 입니다. 업데이트 절에서 조인하고 set 절에서 조인한 컬럼 끼리 매칭 시켜주면 됩니다.
1 2 3 4 5 6 7 | UPDATE ( SELECT a.계급 before, '부자' AS after FROM 사람 a INNER JOIN 재산 b ON a.사람이름 = b.사람이름 WHERE b.재산이름 = '집' ) t SET t.before = t.after; | cs |
* 이 때 ORA-01779 키보존 오류가 날 수 있는데, b.사람이름=pk 를 만족해야 합니다. 만약 multi pk 라 하더라도 모두 명시해주시면 됩니다.
4. 두번째 멀티 조인 업데이트 입니다. 보통의 업데이트 구문처럼 사용하면서 SET 절과 WHERE 절에 각각 서브쿼리를 통해 조인을 합니다.
1 2 3 4 | UPDATE 사람 a SET a.계급 = (SELECT '평민' FROM 재산 b WHERE a.사람이름 = b.사람이름 AND b.재산이름 = '자동차') WHERE a.계급 is null AND EXISTS (SELECT 1 FROM 재산 b WHERE a.사람이름 = b.사람이름 AND b.재산이름 = '자동차'); | cs |
5. 결과는 이렇습니다.
1 | select * from 사람; | cs |
사람이름 | 계급 |
---|---|
임꺽정 | (null) |
홍길동 | 평민 |
김선달 | 부자 |
여기서 실행 및 테스트 해볼 수 있습니다.
http://sqlfiddle.com/#!4/6432f/4
반응형
'Database' 카테고리의 다른 글
db2 port (0) | 2017.12.27 |
---|---|
mysql 날짜 date_add, date_format (0) | 2017.12.17 |
오라클 날짜 oracle date (0) | 2017.10.31 |
ORA-22835: 버퍼가 너무 작아 CLOB를 CHAR 또는 BLOB에서 RAW로 변환할 수 없습니다 (0) | 2017.10.29 |
오라클 - LISTAGG 중복제거 (2) | 2017.10.16 |
오라클 - group by string concat oracle - 행 문자열 합치기 (0) | 2017.09.17 |
오라클 - 랜덤 함수oracle random (0) | 2017.09.01 |
Sql Developer 17002 (0) | 2017.08.21 |