2011-11-02 15 views
0

我使用看起來像這樣的表的複合主鍵(Key1,Key2)的SQL語句UPDATEMySQL如何更新比指定更多的行?

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

我可能會,比方說,20個左右WHEN S IN的CASE聲明。

MySQL怎麼可能說這已經更新了一些比WHEN s更多的行?

回答

4

您的CASE聲明有什麼都沒有與哪些行有關。這是完全到你的WHERE子句:

WHERE鍵2 IN(123782199165241826,5594091315209354374,...,35538​​40348728167644) 和鍵1 IN(400,394,391,389,397);

適合這些條件的每一行都將被更新。那麼,問題是不符合CASE條件的行會發生什麼?

對於這部分我不是100%確定MySQL會做什麼,因爲我更像是一個sql server的傢伙。然而,我懷疑你的CASE語句的結果是NULL,然後分配給FieldName。 MySQL也可能決定不改變任何東西,但我仍然希望它報告與更新的WHERE子句匹配的所有行。

你應該在你的case語句結尾處有一個ELSE FieldName某些你得到後者的行爲(沒有改變)而不是前者(設置爲NULL)。

1

我認爲真正的決定因素是WHERE子句中的值 - 它們是否完全對應於WHEN語句?