带案例的MySQL批量更新何时/然后/否则?

使用CASE WHEN / THEN / ELSE进行批量更新的语法如下-

UPDATE yourTableName set yourColumnName=case when yourColumnName=Value1 then anyUpdatedValue1
when yourColumnName=Value2 then anyUpdatedValue2
when yourColumnName=Value3 then anyUpdatedValue3
when yourColumnName=Value4 then anyUpdatedValue4
else yourColumnName
end;

为了理解上述语法,让我们首先创建一个表。创建表的查询如下-

mysql> create table CaseUpdateDemo
-> (
-> Id int,
-> Name varchar(100)
-> );

使用insert命令在表中插入一些记录。查询如下-

mysql> insert into CaseUpdateDemo values(1,'John');

mysql> insert into CaseUpdateDemo values(2,'Carol');

mysql> insert into CaseUpdateDemo values(3,'Mike');

mysql> insert into CaseUpdateDemo values(4,'Bob');

使用select语句显示表中的所有记录。查询如下-

mysql> select *from CaseUpdateDemo;

输出结果

+------+-------+
| Id   | Name  |
+------+-------+
| 1    | John  |
| 2    | Carol |
| 3    | Mike  |
| 4    | Bob   |
+------+-------+
4 rows in set (0.00 sec)

现在,您可以编写我们上面讨论的查询,以用Case WHEN THEN ELSE更新列ID。查询如下-

mysql> update CaseUpdateDemo set Id=case when Id=1 then 1001
-> when Id=2 then 1002
-> when Id=3 then 1003
-> when Id=4 then 1004
-> else Id
-> end;
Rows matched: 4 Changed: 4 Warnings: 0

现在,您可以使用select语句检查表是否针对ID列进行了更新。查询如下-

mysql> select *from CaseUpdateDemo;

输出结果

+------+-------+
| Id   | Name  |
+------+-------+
| 1001 | John  |
| 1002 | Carol |
| 1003 | Mike  |
| 1004 | Bob   |
+------+-------+
4 rows in set (0.00 sec)