具有不同值的MySQL批处理更新语句

具有不同值的MySQL批处理更新语句,mysql,sql,sql-update,Mysql,Sql,Sql Update,是否有任何一条SQL语句与这些语句等效 UPDATE table_name SET (a = 'something', b='B1') WHERE id=1; UPDATE table_name SET (a = 'something else', b='B2') WHERE id=2; UPDATE table_name SET (a = 'another', b='B3') WHERE id=3; 是的,这个: UPDATE table_name SET a = CASE WHEN

是否有任何一条SQL语句与这些语句等效

UPDATE table_name SET (a = 'something', b='B1') WHERE id=1;
UPDATE table_name SET (a = 'something else', b='B2') WHERE id=2;
UPDATE table_name SET (a = 'another', b='B3') WHERE id=3;
是的,这个:

UPDATE table_name
   SET a = CASE WHEN id = 1
                THEN 'something'
                WHEN id = 2
                THEN 'something else'
                WHEN id = 3
                THEN 'another'
           END
 WHERE id IN (1,2,3)
;

但我不确定这是否是您想要的?

如果要插入更大的数据数组,则可以使用构造。它将在MySQL中更有效地工作


有关用法示例,请参见类似问题。

您可以使用具有常量值的select rows,然后将其与表连接起来

UPDATE table_name T INNER JOIN (select 1 as id,'something' as a,'B1' as b
union all select 2,'something','B2'
union all select 3,'another','B2') V on T.id = V.id set T.a = V.a, T.b = V.b;

请参阅

谢谢,关于多个字段(请参见编辑的问题),我们是否可以将字段包装在案例块中,还是需要为每个字段编写不同的案例块?我的查询将更新5个字段。再次感谢。OP还想更新b,您需要第二个
CASE
。您的5个字段需要5个
CASE
语句。@MoeSweet:您需要单独的CASE表达式,因为MySQL不支持
集(a,b)=(…)
语法,不支持返回多个值的大小写表达式。执行三个单独的语句有什么不对?除非您看到服务器的延迟特别高,否则这不应该是一个问题。