Обновить запрос на основе условия

Я хотел бы сделать следующее. Обновите поле на основе значения другого поля, например

update table set if(fielda=1){fieldb=2 fieldc=3}else{fieldd=2 fielde=3}

Я знаю, что это не действительно mysql, но это лучший способ описать проблему.

 Grumpy13 июл. 2012 г., 23:39
Значения полей не важны. если fielda = 1, установите datefielda = now (), иначе datefieldb = now (). Я надеюсь, что это более понятно.
 spencer759314 июл. 2012 г., 04:56
«трюк» мы используем, чтобы назначить значения для всех этих столбцов. В случае, когда мыdon't Чтобы изменить значение столбца, мы просто назначаем ему текущее значение. Мы используем условный тест (fielda = 1), чтобы решить, назначаем ли мы новое значение или сохраняем значение без изменений. Это шаблон, который мы обычно используем для условного обновления столбца на основе некоторого логического теста, который возвращает логическое значение. Смотри мой ответ. Ответ Юргена Д делает то же самое.

Ответы на вопрос(2)

Решение Вопроса
update table set
b = case when a = 1 then 2 else b end,
c = case when a = 1 then 3 else c end,
d = case when a = 1 then d else 2 end,
e = case when a = 1 then e else 3 end
edit

update table set
datefield_a = case when field_a = 1 then now() else datefield_a end,
datefield_b = case when field_a <> 1 then now() else datefield_b end
 13 июл. 2012 г., 23:20
+1 это выглядит прямо сейчас.
 14 июл. 2012 г., 07:25
@ Grumpy: см. Мое обновление.
 13 июл. 2012 г., 23:20
Вы правы. Хороший улов.
 Grumpy13 июл. 2012 г., 23:37
Значения полей не важны. если fielda = 1, установите datefielda = now (), иначе datefieldb = now (). Я надеюсь, что это более понятно.

что этот синтаксис достигнет результата, который вы пытались указать.

UPDATE mytable
   SET fieldb = CASE WHEN fielda = 1 THEN 2 ELSE fieldb END
     , fieldc = CASE WHEN fielda = 1 THEN 3 ELSE fieldc END
     , fieldd = CASE WHEN fielda = 1 THEN fieldd ELSE 2 END
     , fielde = CASE WHEN fielda = 1 THEN fielde ELSE 3 END

"Трюк" здесь мы обновляем все четыре столбца, но в некоторых «случаях» мы присваиваем текущее значение столбца обратно столбцу, что не приводит к реальному изменению значения столбца. (Как только вы сосредоточитесь на этой идее, это довольно легко.)

В MySQL у нас есть удобная функция IF (недоступная в большинстве других RDBMS), которую мы можем использовать, чтобы немного ее сократить и добиться того же:

UPDATE mytable
   SET fieldb = IF(fielda = 1, 2, fieldb)
     , fieldc = IF(fielda = 1, 3, fieldc)
     , fieldd = IF(fielda = 1, fieldd, 2)
     , fielde = IF(fielda = 1, fielde, 3)

Боль в том, что вам все еще приходится повторять один и тот же условный тест несколько раз.

Один просмотр таблицы (как делают эти операторы), и выполнение всех этих назначений одним махом будет быстрее (и более эффективным), чем разбивание этого и выполнение заданий по частям с использованием нескольких операторов.

Ваш ответ на вопрос