찾은 모든 관련 질문을 살펴 보았지만 광산에 대한 답을 얻을 수 없었습니다. Mysql 한 쿼리에서 여러 행의 한 열을 업데이트하십시오.
는이 같은 테이블을 가지고 : "ID가"기본 키입니다id | name | age | active | ...... | ... |
, 그리고 ... (30) 열 같은 것이있다 의미한다. "활성"열은 tinyint 유형입니다.
내 작업 :
업데이트 식별자 1,4,12,55,111 단일 쿼리에 = 활성 1 (사람들은 단지 예이다, 그것은 총 1,000 다른 ID 일 수있다).
은 내가 그랬어 :
UPDATE table SET active = 1 WHERE id IN (1,4,12,55,111)
- 의 트랜잭션 내, 내가이 과정에서 뭔가를 업데이트하고있어 원인.
엔진은 InnoDB의
내 문제 :
사람이 (가)로 번역합니다 IN의 원인, 이러한 쿼리를 수행하는 실행에서 5 개 쿼리에 해당 말해 줬어 주어진 수의 OR을 찾아서 하나씩 실행하십시오.
결국 1 대신에 IN의 숫자 N을 얻습니다.
그는 임시 테이블을 만들고, 새 값을 모두 삽입 한 다음 조인을 통해 업데이트 할 것을 제안합니다.
맞습니까? 동등성과 성능 모두.
무엇을 제안합니까? 난 삽입을 생각 했어 .. 중복 된 데 도움이 될 것입니다하지만 행에 대한 모든 데이터를 가지고, 그것만 이드, 그리고 내가 그것에 활성화 = 1을 설정하고 싶습니다.
아마도이 쿼리가 더 좋을까요?
UPDATE table SET
active = CASE
WHEN id='1' THEN '1'
WHEN id='4' THEN '1'
WHEN id='12' THEN '1'
WHEN id='55' THEN '1'
WHEN id='111' THEN '1'
ELSE active END
WHERE campaign_id > 0; //otherwise it throws an error about updating without where clause in safe mode, and i don't know if i could toggle safe mode off.
감사합니다.
예 또는 맞음 존재 함. 업데이트 테이블 세트 활성 = 1 어디 존재 (table2에서 1을 선택 ...) –