MYSQL中where 中 使用CASE WHEN
数据准备
CREATETABLE`student`(`name`varchar(10)DEFAULTNULL,`subject`varchar(10)DEFAULTNULL,`score`int(10)DEFAULTNULL,`dayTime`varchar(10)DEFAULTNULL,`monthTime`varchar(10)DEFAULTNULL)ENGINE=InnoDBDEFAULTCHARSET=utf8
INSERTINTO student VALUES('lisi','eng',90,'20240708','202406');INSERTINTO student VALUES('liming','math',90,'20240808','202407');INSERTINTO student VALUES('zhangsan','math',93,'20240706',null);INSERTINTO student VALUES('tom','eng',80,'20240806',null);select*from student
where score >=90andcasewhen name in('lisi','liming')then monthTime = date_format(date_add(dayTime,interval-1month),'%Y%m')else1=1end
运行结果
namesubjectscoredayTimemonthTimelisieng9020240708202406limingmath9020240808202407zhangsanmath9320240706null
语法说明
在看一个老的需求时,发现当时在where条件里面使用了CASE WHEN,一时间没想起来当时为什么写一个where里面嵌套使用CASE WHEN,所以现在记录一下:
- where中使用CASE WHEN ,可以给符合WHEN条件的数据添加特定的筛选条件;
- 上面的表中,有的monthTime为NULL,有的不为NULL,对有的学生需要筛选score和monthTime,有的只需要筛选score,要求把这两种数据在一个查询中同时返回,还要避免UNION,优化SQL执行效率,就可以在where中使用CASE WHEN来实现;
- CASE WHEN根据符合分支判断的结果,把不同的筛选结果,添加到不同的学生的where的条件后面,实现每个学生根据不同的筛选条件单独查询,但是结果一块返回的效果;
版权归原作者 RoadLong 所有, 如有侵权,请联系我们删除。