MySQL如何更新比指定更多的行?

时间:2011-11-02 14:26:29

标签: mysql sql

我有一个SQL UPDATE语句,使用表格的复合主键(Key1,Key2),如下所示:

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

我可能在WHEN声明中有20个左右CASE个。

MySQL怎么会说这比WHEN更多的行更新?

2 个答案:

答案 0 :(得分:4)

您的CASE语句与受影响的行有关。它完全直到您的WHERE子句:

  

WHERE Key2 IN(123782199165241826,5594091315209354374,...,35538​​40348728167644)   AND Key1 IN(400,394,391,389,397);

符合这些条件的每一行都将更新。那么,问题是与CASE条件不匹配的行会发生什么?

对于这部分,我不是100%确定MySQL会做什么,因为我更像是一个sql server人。但是,我怀疑您的CASE语句会导致NULL,然后将其分配给FieldName。 MySQL也可能决定不更改任何内容,但我仍然希望它报告所有与WHERE子句匹配的行更新。

你的case语句末尾应该有一个ELSE FieldName 某些你得到后者的行为(没有变化)而不是前者(设置为NULL)。 / p>

答案 1 :(得分:1)

我认为真正的决定因素是WHERE子句中的值 - 这些是否与WHEN语句完全对应?