如何在SQL中编写此UPDATE,以使用不同的WHERE条件更新多个行

时间:2011-11-14 05:58:30

标签: mysql sql sql-update

我必须编写这个逻辑代码:

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

一个查询中会有多个更新,所以我不想通过为每一行单独更新来填充服务器

另外:如果可以组合2个条件,例如其中col2 ='this'AND col3 ='that'

3 个答案:

答案 0 :(得分:3)

我在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 :(得分: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:

update imported set col1 = 'first'  where col2 = 'value one';
update imported set col1 = 'second' where col2 = 'value two';

答案 2 :(得分:2)

通常我会使用两个语句,但这里是如何在一个语句中完成的:

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');