Как написать это ОБНОВЛЕНИЕ в MSQL, чтобы обновить несколько строк с различными условиями ГДЕ - PullRequest
2 голосов
/ 14 ноября 2011

Мне нужно закодировать эту логику:

UPDATE imported 
   SET col1 = 'first' 
 WHERE col2 = 'value one',
   SET col1 = 'second' 
 WHERE col2 = 'value two';

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

Также: если можно объединить 2 условия, например, где col2 = 'this' И col3 = 'that'

Ответы [ 3 ]

3 голосов
/ 14 ноября 2011

Я добавил пример нескольких условий в операторе 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')
2 голосов
/ 14 ноября 2011

Обычно я бы использовал два утверждения, но вот как это сделать в одном утверждении:

UPDATE imported 
   SET col1 = if(col2 = 'value one', 'first', 'second') 
 WHERE col2 in ('value one', 'value two');

Ваш вопрос содержит ровно два варианта, поэтому я использовал краткое утверждение if.Если у вас есть другие условия, лучше использовать случай:

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');
2 голосов
/ 14 ноября 2011

Примерно так должно получиться:

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';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...