2011-11-02 66 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语句?