복붙노트

[SQL] MySQL은 - 하나 개의 쿼리에서 다른 값으로 UPDATE 여러 행

SQL

MySQL은 - 하나 개의 쿼리에서 다른 값으로 UPDATE 여러 행

나는 다른 값으로 여러 행을 업데이트하는 방법을 이해하려고 노력하고 난 단지 그것을하지 않습니다. 이 솔루션은 어디에나 있지만 내게는 이해하기 어려운 보인다.

예를 들어, 1 개 쿼리에 세 가지 업데이트 :

UPDATE table_users
SET cod_user = '622057'
    , date = '12082014'
WHERE user_rol = 'student'
    AND cod_office = '17389551'; 

UPDATE table_users
SET cod_user = '2913659'
    , date = '12082014'
WHERE user_rol = 'assistant'
    AND cod_office = '17389551'; 

UPDATE table_users
SET cod_user = '6160230'
    , date = '12082014'
WHERE user_rol = 'admin'
    AND cod_office = '17389551'; 

나는 예를 읽을 수 있지만 난 정말 쿼리를 만드는 방법을 이해하지 않습니다. 즉 :

UPDATE table_to_update
SET cod_user= IF(cod_office = '17389551','622057','2913659','6160230')
    ,date = IF(cod_office = '17389551','12082014')
WHERE ?? IN (??) ;

나는 완전히에서 WHERE와 IF condition..any 아이디어에 여러 조건이있는 경우 쿼리를 수행하는 방법을 취소 아니에요?

해결법

  1. ==============================

    1.당신은이 방법을 수행 할 수 있습니다 :

    당신은이 방법을 수행 할 수 있습니다 :

    UPDATE table_users
        SET cod_user = (case when user_role = 'student' then '622057'
                             when user_role = 'assistant' then '2913659'
                             when user_role = 'admin' then '6160230'
                        end),
            date = '12082014'
        WHERE user_role in ('student', 'assistant', 'admin') AND
              cod_office = '17389551';
    

    나는 당신의 날짜 형식을 이해하지 않습니다. 날짜는 기본 날짜 및 시간 형식을 사용하여 데이터베이스에 저장해야합니다.

  2. ==============================

    2.MySQL은 단일 쿼리로 여러 업데이트를 결합하는보다 읽기 쉬운 방법으로 할 수 있습니다. 이 읽기가 훨씬 더 쉽게, 더 나은 당신이 설명하는 시나리오에 맞는 것, 그리고 그 어려운 수습 여러 조건을 방지 할 수 있습니다.

    MySQL은 단일 쿼리로 여러 업데이트를 결합하는보다 읽기 쉬운 방법으로 할 수 있습니다. 이 읽기가 훨씬 더 쉽게, 더 나은 당신이 설명하는 시나리오에 맞는 것, 그리고 그 어려운 수습 여러 조건을 방지 할 수 있습니다.

    INSERT INTO table_users (cod_user, date, user_rol, cod_office)
    VALUES
    ('622057', '12082014', 'student', '17389551'),
    ('2913659', '12082014', 'assistant','17389551'),
    ('6160230', '12082014', 'admin', '17389551')
    ON DUPLICATE KEY UPDATE
     cod_user=VALUES(cod_user), date=VALUES(date)
    

    이것은 user_rol, cod_office 조합이 기본 키 있다고 가정합니다. 이 중 하나만 기본 키 인 경우, 다음 UPDATE 목록에 다른 필드를 추가합니다. 그들 중 어느 것도 (가능성이 보인다) 기본 키의 경우,이 방법은 항상 새 레코드를 생성합니다 - 수배 아마 것.

    그러나이 방법은 빌드 더 간결에보다 쉽게 ​​준비된 문을합니다.

  3. ==============================

    3.당신은 핸들 여러에 CASE 문을 사용할 수있는 경우 / 다음 시나리오 :

    당신은 핸들 여러에 CASE 문을 사용할 수있는 경우 / 다음 시나리오 :

    UPDATE table_to_update 
    SET  cod_user= CASE WHEN user_rol = 'student' THEN '622057'
                       WHEN user_rol = 'assistant' THEN '2913659'
                       WHEN user_rol = 'admin' THEN '6160230'
                   END
        ,date = '12082014'
    WHERE user_rol IN ('student','assistant','admin')
      AND cod_office = '17389551';
    
  4. ==============================

    4.

    update table_name
    set cod_user = 
        CASE 
        WHEN user_rol = 'student' THEN '622057'
        WHEN user_rol = 'assistant' THEN '2913659'
        WHEN user_rol = 'admin' THEN '6160230'?
        END,date = '12082014'
    
    WHERE user_rol IN ('student','assistant','admin')
    AND cod_office = '17389551';
    
  5. from https://stackoverflow.com/questions/25674737/mysql-update-multiple-rows-with-different-values-in-one-query by cc-by-sa and MIT license