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?
Ответы
Ответ 1
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
;
Ответ 2
Я не знаю никакого чистого способа делать то, что вы просите. Эквивалентное действующее обновление 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'
) несколько раз, но я просто не думаю, что это возможно любым другим способом.
Ответ 3
Если 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
, и они будут проигнорированы.