반응형
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';
반응형
'program story' 카테고리의 다른 글
dplyr을 사용하여 테이블의 모든 행에 함수를 적용 하시겠습니까? (0) | 2020.07.28 |
---|---|
C #에서 개체 속성 비교 (0) | 2020.07.28 |
UIView를 강제로 다시 그리는 가장 강력한 방법은 무엇입니까? (0) | 2020.07.28 |
새로운 대기열에 자동으로 기존 값을 대기열에 넣는 고정 크기 대기열 (0) | 2020.07.28 |
Javascript에서 일부 비동기 작업이 완료되기를 기다리는 가장 간단한 방법은 무엇입니까? (0) | 2020.07.28 |