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表达式,使更新操作更加灵活、高效。