2011-11-02 3 views
0

나는이 같은 형태의 테이블의 화합물 기본 키 (Key1,Key2)를 사용하여 SQL UPDATE 문이 :MySQL이 지정된 것보다 많은 행을 어떻게 UPDATE 할 수 있습니까?

UPDATE TableName SET FieldName = CASE 
WHEN (Key1=389 AND Key2=5594091315209354374) THEN 1320243147187 
WHEN (Key1=397 AND Key2=8686441440518828409) THEN 1320243147562 
WHEN (Key1=389 AND Key2=5717973625907258381) THEN 1320243147182 
.... 
WHEN (Key1=394 AND Key2=5512452777552926025) THEN 1320243147389 END 
WHERE Key2 IN (123782199165241826,5594091315209354374,...,3553840348728167644) 
AND Key1 IN (400,394,391,389,397); 

I 수도 있고, 말의 CASE 문에 20 개 정도 WHEN의.

MySQL이 WHEN보다 약간 더 많은 행을 업데이트했다고 어떻게 말할 수 있습니까?

답변

4

CASE 문에 영향을받는 행과 관련하여이없는 이 없습니다. 그것은 최대 완전히의 당신의 WHERE 절 :

WHERE 키 2 IN (123782199165241826,5594091315209354374, ..., 3553840348728167644) 및 키 1 IN (400,394,391,389,397);

해당 조건에 맞는 모든 행이 업데이트됩니다. 그렇다면 CASE 조건과 일치하지 않는 행은 어떻게됩니까?

나는이 부분에 대해 SQL Server에 대해 더 많은 것을 알고 있기 때문에 MySQL이 무엇을 할 것인지 100 % 확신하지 못했습니다. 그러나 CASE 문이 NULL이되고 FieldName에 할당되었다고 생각됩니다. 또한 MySQL이 아무 것도 변경하지 않기로 결정할 수도 있지만 WHERE 절과 일치하는 모든 행을 업데이트 된 것으로보고 할 것으로 기대합니다.

케이스 설명 끝 부분에 ELSE FieldName을 지정해야합니다. 특정은 이전 (NULL로 설정)보다 후자의 동작 (변경 없음)을 얻습니다.

1

실제 결정 요인은 WHERE 절의 값인 것으로 생각합니다. 정확히 WHEN 문과 일치합니까?

관련 문제