[MYSQL] 다중 업데이트문 0 1 2,504

by 쿼리냠냠 [MySQL] update 쿼리 [2018.04.05 11:40:49]


안녕하세요.^^ (DB초보자)

DB 선배님들..... 개인적으로 프로젝트를 구현하다 궁금한게 생겨 질문드립니다. (



*DB구조

*student Table *
id | long | PK 
name | STRING |
class | int | 

 

데이터예시)
id  | name | class
1    |  홍길동 | null
2    |  코코 |  null
3    | 바나나 | null


[1.] Student테이블의 class값을 일괄 업데이트를 하기위해서 다음과같은 쿼리를 날립니다.

update student set class =1;  OR
update student set class =1 where id in (1,2,3);

 결과는

데이터예시)
id  | name | class
1    |  홍길동 | 1
2    |  코코    |  1
3    | 바나나  | 1

 

하지만 제가원하는건 [1.] Student테이블의 class값을 일괄 업데이트를 하지만 값이 다다르도록 설정하고싶어요.

원하는 결과값

데이터예시)
id  | name | class
1    |  홍길동 | 2
2    |  코코    |  4
3    | 바나나  | 10


'쿼리'를 날릴때 '특정값( 홍길동은 '2'반 / 코코는 '4'반 / 바나나는 '10'반 )으로 날려서 일괄업데이트를 하고싶습니다.

어떻게 해야하는지 조언 부탁드립니다.

 

좋은 하루 보내세요!

by 마농 [2018.04.05 13:08:45]

참조 대상 집합이 별도로 존재한다면? 조인 업데이트를 이용하는게 좋을 듯 하구요.
임의로 값을 지정해야 한다면? 그냥 각각 업데이트 하는게 좋을 듯 하네요.
 

-- 1. 각각 Update 하기
UPDATE student SET class =  2 WHERE id = 1;
UPDATE student SET class =  4 WHERE id = 2;
UPDATE student SET class = 10 WHERE id = 3;
-- 2. Case 문으로 값 지정
UPDATE student
   SET class = CASE id WHEN 1 THEN 2 WHEN 2 THEN 4 WHEN 3 THEN 10 END
 WHERE id IN (1, 2, 3)
;
-- 3. Join Update
UPDATE student a
 INNER JOIN
       (SELECT 1 id, 2 class
        UNION ALL SELECT 2,  4
        UNION ALL SELECT 3, 10
        ) b
    ON a.id = b.id
   SET a.class = b.class
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입