我有一个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
更多的行更新?
答案 0 :(得分:4)
您的CASE语句无与受影响的行有关。它完全直到您的WHERE子句:
WHERE Key2 IN(123782199165241826,5594091315209354374,...,3553840348728167644) 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语句完全对应?