在日常开发中
有些需求我们无法避免的要在SQL语句中进行类似于Java中if判断的操作,那SQL语句是否可以满足呢?
本文将介绍SQL条件判断关键字case when的基本用法
case x when y then z else m end
乍一看看不懂没关系,我们把它拆分开解释
case x 意思就是设置一个参数,x可以是一个数据库字段,也可以是一个dao层传递的参数,也可以是一个固定值
when y 意思就是给设定的x参数设置条件
then z 就是当x满足y条件之后做的操作,类似于Java中if条件为true的情况
else m 当x不满足y条件时的操作,类似于Java中的if条件为false的else代码块
end 代表本case when语句结束,每个case when语句都要带有end 否则sql语句报错
整体解释就是
设置一个x参数,当x满足y时执行z 不满足时执行m(x可忽略,原因请看下文中的举例.)
假设dao传递了一个type参数,查询User表中的password字段,并且当type为1时 查询帐号,当type为2时,查询用户id
SELECT PASSWORD,
CASE #{type} WHEN 1 THEN id
WHEN 2 THEN loginName
ELSE money
END AS Data
FROM USER
查询User表的全部,当表的id字段为1的时候,根据id='1’查询 当表的id字段为2的时候 根据loginName='1’查询,否则根据todayMoney='1’查询
SELECT *
FROM USER
WHERE CASE id WHEN '1' THEN id
WHEN '2' THEN loginName
ELSE todayMoney
END
='1'
假设dao层传递一个type参数,当type=1时,根据id降序排列,当type=2时,根据phone升序排列
SELECT *
FROM USER
ORDER BY
CASE WHEN #{type}= '1' THEN id END DESC,
CASE WHEN #{type}='2' THEN phone END asc
这里就省略了x,换了一种写法.这种更适用于判断大于小于这些条件.
执行结果
还有其它许多使用场景 就不一一举例了.
期待您的不吝赐教