Как может MySQL ОБНОВИТЬ больше строк, чем указано? - PullRequest
0 голосов
/ 02 ноября 2011

У меня есть оператор 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); 

У меня может быть, скажем, 20 или около того WHEN s в операторе CASE.

Как MySQL может сказать, что это обновило немного больше строк, чем WHEN s?

Ответы [ 2 ]

4 голосов
/ 02 ноября 2011

Ваш оператор 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, как обновленные.

Вы, вероятно, должны иметь ELSE FieldName в конце вашего оператора case, чтобы быть определенным , вы получаете последнее поведение (без изменений), а не первое (установлено в NULL).

1 голос
/ 02 ноября 2011

Я думаю, что реальными определяющими факторами являются значения в вашем предложении WHERE - точно ли они соответствуют операторам WHEN?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...