본문 바로가기
DataBase/MySQL, MariaDB

SELECT JOIN 문을 이용한 UPDATE QUERY

by ojava 2017. 3. 30.
반응형

기존 테이블에 신규 필드가 추가되면서 해당 필드에 특정 값을 입력해줘야 하는 일이 생겼다.

 

그 값이라는 것 마저도 기존 데이터를 이용해서 할 수 있는 확정된 기준이 없고

요청자가 row 별로 원하는 데이터를 엑셀로 넘겨줘서 이를 이용해야 했다.

엑셀 데이터를 입력하는 일 마저도 난감했지만 여차저차 프로그램을 짜고 임시테이블에 데이터를 밀어넣어서, 이 임시 테이블을 맵핑해서 원하는 테이블의 필드값을 update 해야 했다.

 

이에 사용했던 쿼리문을 정리해보고자 한다.

 

 

 

SELECT JOIN 문을 이용한 UPDATE QUERY

 

 

 

dev.mysql.com 에서 제공하는 UPDATE Syntax 를 간략하게 표현하면

우리가 자주 사용하는 일반적인 UPDATE Query 문이 나온다.

 

 

UPDATE table_references
    SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...
    [WHERE where_condition]

 

 

 

일반적으로는 어떤 조건에 맞는 하나의 테이블의 필드를 수정한다.

저 조건 값을 빼먹는 순간.. N rows updated 되면서 아주 망하는 수가 있으니

where 절은 왠만하면 한 번 더 확인해보는 습관을 들이자.

 

 

 

그리고 지금 포스팅에서 말하고자 하는 SELECT JOIN 문을 이용한

UPDATE Query 예시도 Mysql Documentation에서 제공하고 있다.

 

UPDATE 명령어도 여러 테이블에 적용할 수 있지만, ORDER BY 또는 LIMIT를 함께 사용할 수는 없다.

table_references 부분에 JOIN을 걸어줄 테이블 목록을 명시해 주면 된다.

 

 

 

UPDATE items,month  -- JOIN을 걸어줄 테이블 목록

     SET items.price=month.price -- items 테이블의 price 필드를 변경해준다.
WHERE items.id=month.id; -- JOIN 조건

 

 

위의 예시는 MySql에서 적용해 준 예시이고

WHERE 절을 안쓰더라도 JOIN의 일반적인 형태를 이용해서도

UPDATE Query를 작성할 수 있다.

 

 

UPDATE tbl_object a INNER JOIN temp_data b

   ON a.seq = b.seq
    SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...
    [WHERE where_condition]

 

 

 

위의 형태로 UPDATE Query를 작성하면 좀 더 활용방안이 많아질 듯 하다.

덕분에 큰 어려움 없이 데이터 매핑을 완료해서 오늘도 정시퇴근!

 

조만간 엑셀 데이터를 밀어넣었던 프로그램 짜는 내용도 공유를 해야할텐데...

필요한 라이브러리 정리하다가 포스팅 끝날 듯 ㅋ_ㅋ

 

 

 

 

 

3월도 벌써 하루밖에 안남았네.

2017년 1분기도 안녕!

 

반응형