Background Image
조회 수 7414 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

업무상 A 테이블의 특정 row 전체 혹은 다수를 B 테이블로 UPDATE를 수행해야 할 경우 

다수의 서브쿼리를 사용하는 다음과 같은 방법을 생각할 수 있습니다.

UPDATE B SET col1 = (SELECT col1 FROM A WHERE col1 = 1), col2 = (...), col3 = (...), ... WHERE col1 = 1; 


위와 같은 방법은 불필요한 서브쿼리가 많아 SQL이 복잡하게 되므로 다음과 같은 형태로 변경이 가능합니다.

UPDATE B SET (B.col1, B.col2, B.col3, ...) = (SELECT A.col1, A.col2, A.col3, ... FROM A WHERE A.col1 = B.col1) WHERE B.col1 = 1 


예제는 다음과 같습니다.

1. 테이블 생성 및 데이터 INSERT

CREATE TABLE A (col1 INT PRIMARY KEY, col2 CHAR(1), col3 CHAR(1));

CREATE TABLE B (col1 INT PRIMARY KEY, col2 CHAR(1), col3 CHAR(1));


INSERT INTO a VALUES(1, '1', '1');

INSERT INTO a VALUES(2, '2', '2');

INSERT INTO a VALUES(3, '3', '3');

INSERT INTO a VALUES(4, '4', '4');

INSERT INTO a VALUES(5, '5', '5');


INSERT INTO b VALUES(1, 'A', 'A');

INSERT INTO b VALUES(2, 'A', 'A');

INSERT INTO b VALUES(3, 'A', 'A');

INSERT INTO b VALUES(4, 'A', 'A');

INSERT INTO b VALUES(5, 'A', 'A'); 


2. A 와 B 테이블 조회

csql> select * from a;


         col1  col2                  col3                

=========================================================

            1  '1'                   '1'                 

            2  '2'                   '2'                 

            3  '3'                   '3'                 

            4  '4'                   '4'                 

            5  '5'                   '5'                 



csql> select * from b;


         col1  col2                  col3                

=========================================================

            1  'A'                   'A'                 

            2  'A'                   'A'                 

            3  'A'                   'A'                 

            4  'A'                   'A'                 

            5  'A'                   'A'                  


3. B 테이블의 첫 번째 row를 모두 A의 첫 번째 로우로 UPDATE

UPDATE B SET (B.col2, B.col3) = (SELECT A.col2, A.col3 FROM A WHERE A.col1 = B.col1) WHERE B.col1 = 1; 


4. UPDATE 결과 확인

csql> select * from b;


         col1  col2                  col3                

=========================================================

            1  '1'                   '1'                 

            2  'A'                   'A'                 

            3  'A'                   'A'                 

            4  'A'                   'A'                 

            5  'A'                   'A'            



List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
19 질의작성 입력된 년월 또는 두개의 날짜을 이용하여 달력 및 주차 구하기 1 성진 2016.08.10 5585
18 응용개발 CUBRID 와 DBCP의 관계 엄기호 2016.12.14 2801
17 기타 Tomcat's JDBC Pool 사용 시 JNDI DataSource 설정 손승일 2016.12.16 6504
16 기타 JBoss 사용 시 statement pooling 설정 손승일 2016.12.16 2932
15 기타 Oracle import 시 character set 변경관련 김창휘 2016.12.26 8695
14 질의작성 subquery를 이용한 튜닝예제 file 김창휘 2016.12.27 3327
13 질의작성 UPDATE에서 조인을 통해, 결과값 수정하는 방법 박동윤 2016.12.27 7184
12 질의작성 CONNECT BY 절 포함 질의 튜닝 예제 박세훈 2017.02.28 9764
11 운영관리 CUBRID 8.2.2 ~ 8.4.x 버전에서 'ALTER SERIAL ... CACHE <cached_num> / NOCACHE' ERROR 해결 방법 주영진 2017.03.08 2168
10 질의작성 loose index scan을 활용한 효과적인 쿼리 튜닝 방안 박세훈 2017.06.01 2417
9 질의작성 테이블 명세서 쿼리 1 성진 2017.08.04 3187
8 운영관리 윈도우 OS에서 java sp 사용 시 Java VM is not running 해결 방법 정훈 2017.09.04 2234
7 질의작성 JAVA_SP를 이용해서 정규표현식을 이용해서 치환을 하자. file 성진 2017.10.10 1333
6 응용개발 CUBRID PHP 드라이버 빌드와 연동방법 정만영 2018.03.07 3770
5 질의작성 입력된 날자를 이용하여 해당 주차의 모든 날자 구하기 성진 2018.04.10 1114
4 질의작성 여러개의 컬럼을 하나로 묶어주는 함수 CONCAT_WS 사용방법 엄기호 2019.01.29 7244
3 운영관리 CUBRID 브로커와 시스템 메모리 정만영 2019.03.12 2384
2 질의작성 VALUES 절 활용하기 황영진 2020.05.13 820
1 질의작성 synonym에 대하여 김민종 2023.09.07 263
Board Pagination Prev 1 ... 5 6 7 8 9 10 11 12 13 14 Next
/ 14

Contact Cubrid

대표전화 070-4077-2110 / 기술문의 070-4077-2113 / 영업문의 070-4077-2112 / Email. contact_at_cubrid.com
Contact Sales