CASE xxx WHEN 是 MySQL 的 CASE 语句中的一种写法,用于在条件满足时返回对应的值。语法格式如下:
CASE value
WHEN compare_value1 THEN result1
WHEN compare_value2 THEN result2
...
[ ELSE resultN ]
END;
其中,value 是需要比较的值,可以是字段名、变量、表达式等;compare_value1、compare_value2 等是需要比较的值,可以是常量、表达式等;result1、result2 等是对应比较值相等时返回的结果;ELSE resultN 是可选的,表示当没有任何一个比较值与 value 相等时返回的结果。如果没有 ELSE 子句,当没有任何一个比较值与 value 相等时返回 NULL。
在 MyBatis 的 标签中使用 CASE id WHEN,是为了在更新 my_table 表的 status 字段时,只更新传入的对象列表中指定的记录,避免将不需要更新的记录也一并更新。具体实现方式是,将传入的对象列表中的每个对象的 id 和 status 映射到 SQL 语句中的 WHEN 子句中,只有当当前记录的 id 与传入的对象列表中的某个 id 相等时,才将对应的 status 值更新到数据库中。当不满足任何一个 WHEN 子句时,将使用 ELSE status 子句返回原始的 status 值,避免对不需要更新的记录进行误操作。
例如,假设有一个 my_table 表,包含 id 和 status 两个字段,其中有三条记录: