mysql中update的时候添加case

在MySQL数据库中,我们经常需要使用UPDATE语句来更新表中的数据。有时候我们需要根据特定的条件来更新数据,这时就可以用到CASE语句。CASE语句给予MySQL update语句更多的灵活性,可以根据不同的条件更新不同的字段值。
CASE语法
CASE语句包含两种形式:简单CASE表达式和搜索CASE表达式。
简单CASE表达式
简单CASE表达式的语法如下:
CASE case_value
WHEN when_value THEN result
[WHEN when_value THEN result ...]
[ELSE result]
END
在这里,case_value是要被比较的值,当case_value等于when_value时,返回result。如果没有匹配到任何when_value,则返回ELSE后面的result。如果没有匹配到任何条件,且没有ELSE,则返回NULL。
搜索CASE表达式
搜索CASE表达式允许我们使用任意表达式来进行条件判断,其语法如下:
CASE
WHEN condition1 THEN result1
[WHEN condition2 THEN result2 ...]
[ELSE result]
END
在搜索CASE表达式中,每个WHEN后面可以是一个复杂的条件,满足条件时就执行对应的result。如果没有满足任何条件,同样可以使用ELSE来指定默认的result。
示例
假设有一个学生表students,结构如下:
| id | name | score |
|---|---|---|
| 1 | Alice | 85 |
| 2 | Bob | 78 |
| 3 | Charlie | 92 |
| 4 | David | 65 |
| 5 | Eve | 88 |
现在我们需要根据学生的分数进行不同的奖励,如果分数大于等于90分,则奖励level为’A’;分数大于等于80分小于90分,则奖励level为’B’;分数小于80分,则奖励level为’C’。
我们可以使用CASE语句来实现这个需求:
UPDATE students
SET level =
CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 AND score < 90 THEN 'B'
ELSE 'C'
END;
执行以上SQL语句后,students表会被更新如下:
| id | name | score | level |
|---|---|---|---|
| 1 | Alice | 85 | B |
| 2 | Bob | 78 | C |
| 3 | Charlie | 92 | A |
| 4 | David | 65 | C |
| 5 | Eve | 88 | B |
在这个示例中,我们使用了搜索CASE表达式,并根据不同的条件来更新了level字段的值。
当然,我们也可以使用简单的CASE表达式来实现相同的功能:
UPDATE students
SET level =
CASE score
WHEN score >= 90 THEN 'A'
WHEN score >= 80 AND score < 90 THEN 'B'
ELSE 'C'
END;
上述SQL语句也能够正确更新students表。
结论
在MySQL中,我们可以使用CASE语句来在UPDATE语句中根据特定条件更新字段的值。通过灵活运用CASE语句,我们可以根据不同的情况更新数据,扩展了UPDATE语句的功能。在实际应用中,我们可以根据具体的需求选择简单CASE表达式或搜索CASE表达式,使更新操作更加灵活、高效。
极客笔记