Да, вы можете с помощью оператора CASE.
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 (четное), присваивает значение x значению val и, когда 1 (нечетное), присваивает значение y значению val. Чем больше объем данных, обновляемых этим оператором, тем чище его сравнивать с несколькими UPDATE
операторами.
Короче говоря, операторы CASE
иногда так же удобочитаемы и понятны, как операторы UPDATE
. Все зависит от того, что вы пытаетесь с ними сделать.
EDIT : добавлено условие ELSE для большей безопасности. OP может быть заинтересован в обновлении только определенных строк, поэтому остальные должны оставаться такими же, как до ОБНОВЛЕНИЯ.
EDIT : добавлен сценарий, в котором оператор CASE
является более эффективным подходом, чем несколько операторов UPDATE
.