有如下几个场景:
1. user_score表,class表示班级名称,username表示学生名称,score表示成绩
id | class | username | score |
1 | A | user01 | 89 |
2 | A | user02 | 90 |
3 | A | user03 | 91 |
4 | B | user01 | 92 |
5 | B | user02 | 93 |
需求:需要批量更新A班级内,user01、user02、user03的score值,使用一条sql语句,而不是3条sql
可以使用update 表名 set 字段名= case when ... then ... when ... then ... end 语句
update user_score set score = case
when username = 'user01' then 100
when username = 'user02' then 99
when username = 'user03' then 98
end
where class = 'A'
2. task表,desc表示任务描述,principal表示任务负责人,creater表示创建人
id | desc | principal | creater | status |
1 | 任务1 | user01 | user03 | 待处理 |
2 | 任务2 | user02 | user01 | 处理中 |
3 | 任务3 | user01 | user01 | 待处理 |
4 | 任务4 | user02 | user01 | 已处理 |
5 | 任务5 | user01 | user04 | 处理中 |
6 | 任务6 | user02 | user03 | 待处理 |
需求:查询任务排序规则为,任务负责人=user01在前排,创建人=user01在后排
可以使用order by CASE WHEN ... THEN ... else CASE WHEN ... THEN ... else ... END end
select id,desc,principal,creater from task
order by CASE WHEN principal = 'user01' THEN 1
else CASE WHEN creater = 'user01' THEN 2
else 3
END
end
3. 查询任务排序规则为,按照状态位 待处理、处理中、已处理顺序正排
可以使用order by case 字段名 when ... then ... end asc
select id,desc,principal,creater from task
order by case status
when '待处理' then 1
when '处理中' then 2
when '已处理' then 3
end
asc