MySQL CASE для обновления нескольких столбцов

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

UPDATE tablename SET CASE name WHEN 'name1' THEN col1=5,col2='' WHEN 'name2' THEN col1=3,col2='whatever' ELSE col1=0,col2='' END; 

Есть ли способ достижения ожидаемого результата с помощью действительного SQL?

 UPDATE tablename SET col1 = CASE WHEN name = 'name1' THEN 5 WHEN name = 'name2' THEN 3 ELSE 0 END , col2 = CASE WHEN name = 'name1' THEN '' WHEN name = 'name2' THEN 'whatever' ELSE '' END ; 

Я не знаю какого-либо чистого способа делать то, что вы просите. Эквивалентное действующее обновление SQL:

 UPDATE tablename SET col1 = CASE name WHEN 'name1' THEN 5 WHEN 'name2' THEN 3 ELSE 0 END, col2 = CASE name WHEN 'name1' THEN '' WHEN 'name2' THEN 'whatever' ELSE '' END; 

Конечно, это не очень удобно и требует повторения тех же самых случаев (например, 'name1' ) несколько раз, но я просто не думаю, что это возможно любым другим способом.

Если name имеет уникальный индекс и ваши значения, как известно, существуют в таблице, вы можете использовать этот трюк:

 INSERT INTO tablename (name, col1, col2) VALUES ('name1', 5, '') , ('name2', 3, 'whatever') ON DUPLICATE KEY UPDATE col1 = VALUES(col1) , col2 = VALUES(col2); 

Если есть дополнительные столбцы NOT NULL без значения по умолчанию, вам нужно будет добавить фиктивные значения для них. Просто оставьте их из ON DUPLICATE KEY UPDATE и они будут проигнорированы.