Да, вы можете с сазе.
UPDATE table
SET val = CASE someproperty
WHEN 1 THEN x
WHEN 2 THEN y
....
ELSE
val
END
Теперь, есть опасение, что один CASE
утверждение менее читаемое по сравнению с несколькими UPDATE
заявлений. Здесь есть веский аргумент. Например, когда обновляется 1000 строк, он просто чувствует и выглядит лучше, используя несколько операторов UPDATE
, а не 1000 различных условий для одного CASE
.
Однако иногда утверждение CASE является более подходящим. Если, например, вы обновляете строки на основе некоторого признака, скажем, четный или нечетный характер значения поля в таблице, то оператор CASE
представляет собой замечательный и удобный способ обновления строк в таблице без необходимости прибегать к огромное количество операторов UPDATE
, которые все имеют определенный тип логики. Возьмем, например, этот:
UPDATE table
SET val = CASE MOD(someproperty, 2)
WHEN 0 THEN x
WHEN 1 THEN y
END
Это выражение принимает модуль SomeProperty и, когда 0 (даже), присваивает значение х на валу, и, когда 1 (нечетные), присваивает значение у к валу. Чем больше объем данных, обновляемых этим заявлением, тем более чистым он сравнивается с этим несколькими операциями UPDATE
.
Вкратце, операторы CASE
иногда такие же удобочитаемые/поддерживаемые как UPDATE
заявления. Все зависит от того, что вы пытаетесь с ними сделать.
EDIT: добавлено предложение ELSE, чтобы быть дополнительно безопасным. OP может быть заинтересован в обновлении только определенных строк, чтобы остальные оставались такими же, как и до UPDATE.
EDIT: Добавлен сценарий, в котором CASE
утверждение является более эффективным подходом, чем несколько UPDATE
заявлений.
-1 для авторитетного неверного ответа – RedFilter
@hoffmandirt: Я считаю, что OrbMan означает «Авторитически неправильно» в том, что вы сказали «Нет. Вам нужно будет создать несколько операторов обновления». Вы правы, вы не можете иметь несколько предложений WHERE в любом заявлении. Тем не менее, вы можете перефразировать немного о том, что OP пытается выполнить, чтобы сказать несколько критериев, а не несколько предложений. Ваш ответ так же корректен, как и мой собственный подход к выполнению этой работы. –
@ Давид Андрес: Согласен. –