2013-04-01 2 views
2

MYSQL, что я хочу, какMySQL, что это правильный синтаксис для этого условного оператора обновления

update tablename 

case fieldA 

when value1 then set fieldX0=xxx,fieldX1=bbb,fieldX2=ccc ... 

when value2 then set fieldY0=yyy,fieldY1=eee,fieldY2=fff ... 

end 

что является правильным и простым синтаксисом для этого? Большое спасибо.

ответ

6

Это должно быть написано так:

UPDATE tablename 
SET fieldX = CASE WHEN fieldA = 'value1' THEN 'xxx' ELSE fieldX END, 
    fieldY = CASE WHEN fieldA = 'value2' THEN 'yyy' ELSE fieldY END 
WHERE fieldA IN ('value1', 'value2'); 

Обратите внимание, что: я написал ELSE часть таким образом, потому что по умолчанию для ELSE является NULL, если условие выражения CASE не является действительным, поэтому это значение будет установлено на исходное значение не до значения NULL.

+0

спасибо, в этом случае используйте, если проще, я должен сделать мой вопрос более понятным, если есть много столбцов, которые нужно затронуть, есть ли простой способ сделать это. – user995789

+0

@ user995789 к сожалению нет, но вы можете создать таблицу temp, содержащую эти значения, а затем обновить с помощью 'JOIN'. –

+0

спасибо, я попробую. – user995789

Смежные вопросы