MySQL CASE ... WHERE ... THEN заявления - PullRequest
11 голосов
/ 02 декабря 2011

У меня есть оператор MySQL UPDATE, в котором используется предложение CASE

UPDATE partsList SET quantity =  
CASE
  WHEN partFK = 1 THEN 4
  WHEN partFK = 2 THEN 8
END
WHERE buildFK = 1;

Вышеприведенное утверждение работает. Тем не менее, когда я удаляю одно из утверждений WHEN, оно ломается, и ошибка указывает, что предложение CASE ничего не возвращает. Если предложение CASE должно иметь более одного КОГДА для работы.

Я не знаю заранее, сколько обновлений мне понадобится, поэтому я пытаюсь создать один оператор обновлений, который может обрабатывать одно или несколько обновлений.

Спасибо за любые идеи, которые вы можете предоставить.

Ответы [ 2 ]

28 голосов
/ 02 декабря 2011

Дело не в том, что CASE должно иметь более одного, WHEN...THEN, оно заключается в том, что оно должно обрабатывать всю дату, которую вы ему даете.

Если вы удалили одно из предложений, вы уходитедыра.например,

UPDATE partsList SET quantity =  
CASE
  WHEN partFK = 1 THEN 4
END
WHERE buildFK = 1;

При использовании этого оператора обновления, если parkFK равно 2, обновление завершится неудачно, поскольку CASE не может обработать ввод.

Вы можете либо ограничить исходные данные, добавив еще одну строку в ваше предложение where (например, AND partFK in (1,2)), либо добавить ELSE к выражению case.

UPDATE partsList SET quantity =  
CASE
  WHEN partFK = 1 THEN 4
  WHEN partFK = 2 THEN 8
  ELSE 12 
END
WHERE buildFK = 1;

Однако, исходя из показанного вами оператора SQL, возможно, существует лучший способ.Предположительно, partFK является внешним ключом для некоторой другой таблицы.Можете ли вы извлечь значение для quantity оттуда?

1 голос
/ 02 декабря 2011

Добавьте ELSE NULL или что-то перед END кейса.См. http://dev.mysql.com/doc/refman/5.0/en/case-statement.html для получения дополнительной информации.

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