#mysql #sql #sql-update
#mysql #sql #sql-обновление
Вопрос:
Я должен закодировать эту логику:
UPDATE imported
SET col1 = 'first'
WHERE col2 = 'value one',
SET col1 = 'second'
WHERE col2 = 'value two';
В одном запросе будет несколько обновлений, поэтому я не хочу перегружать сервер, выполняя обновление отдельно для каждой строки
Также: если 2 условия могут быть объединены, например, где col2=’this’ И col3=’that’
Ответ №1:
Я добавил пример нескольких условий в CASE
инструкцию.
UPDATE imported
SET col1 = CASE
WHEN col2 = 'value one' THEN 'first'
WHEN col2 = 'value two' THEN 'second'
WHEN col2 = 'other val' AND col3 = 'condition' THEN 'third value'
END
WHERE col2 IN ('value one', 'value two')
OR (col2 = 'other val' AND col3 = 'condition')
Комментарии:
1. спасибо, это сработало, за исключением того, что оно должно быть END вместо END CASE однако, как я могу добавить другое условие к WHERE в нем, чтобы col3 тоже было чем-то?
2. Я обновил свой ответ, чтобы вы могли увидеть условие where col3.
Ответ №2:
Что-то вроде этого должно сработать:
update imported
set col1 = case col2
when 'value one' then 'first'
when 'value two' then 'second'
end
where col2 = 'value one'
or col2 = 'value two'
Или вы могли бы просто использовать два обновления:
update imported set col1 = 'first' where col2 = 'value one';
update imported set col1 = 'second' where col2 = 'value two';
Комментарии:
1. спасибо, получилось с ответом Адамса, но ваш, похоже, тоже работоспособен
Ответ №3:
Обычно я бы использовал два оператора, но вот как это сделать в одном операторе:
UPDATE imported
SET col1 = if(col2 = 'value one', 'first', 'second')
WHERE col2 in ('value one', 'value two');
В вашем вопросе указаны ровно два варианта, поэтому я использовал краткое if
утверждение. Если у вас есть другие условия, лучше используйте case:
UPDATE imported
SET col1 = case col2
when 'value one' then 'first'
when 'value two' then 'second'
when 'value three' then 'third'
else 'something else' end
WHERE col2 in ('value one', 'value two', 'value three');