program story

MySQL-하나의 쿼리에서 다른 값으로 여러 행 업데이트

inputbox 2020. 7. 28. 08:29
반응형

MySQL-하나의 쿼리에서 다른 값으로 여러 행 업데이트


다른 값으로 여러 행을 업데이트하는 방법을 이해하려고하는데 그것을 얻지 못합니다. 해결책은 어디에나 있지만 나에게는 이해하기 어려운 것 같습니다.

예를 들어, 하나의 쿼리에 대한 세 가지 업데이트 :

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 조건에 여러 조건이있는 경우 쿼리를 수행하는 방법이 완전히 명확하지 않습니다. 아이디어?


이 방법으로 할 수 있습니다 :

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';

날짜 형식을 이해하지 못합니다. 날짜는 기본 날짜 및 시간 유형을 사용하여 데이터베이스에 저장해야합니다.


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조합이 기본 키 라고 가정합니다 . 이 중 하나만 PK 인 경우 다른 필드를 UPDATE 목록에 추가하십시오. 둘 중 어느 것도 기본 키가 아닌 경우 (아마도 없을 것 같음)이 방법은 항상 새 레코드를 작성합니다 (아마도 원하는 것은 아님).

그러나이 접근법은 준비된 진술을보다 쉽고 간결하게 작성합니다.


CASE명령문을 사용하여 여러 if / then 시나리오를 처리 할 수 ​​있습니다.

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';

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';

참고 URL : https://stackoverflow.com/questions/25674737/mysql-update-multiple-rows-with-different-values-in-one-query

반응형