sql where后面添加多个if判断 202515361编辑
Heaven helps those who help themselves
资深码农+深耕理财=财富自由
欢迎关注
资深码农+深耕理财=财富自由
欢迎关注

sql where后面添加多个if判断
Created by Marydon on 2021-03-25 19:00
1.情景展示
有时候,我们需添加动态where条件,也就是多个if条件判断,如何实现?
动态SQL还是很常见的,这里分情况说明
2.mybatis
mybatis的用法相对简单,是我们经常会用到的
直接使用<if test=""></if>标签搞定即可
2.mysql
动态where条件,通常会在存储过程中使用
通过if()函数实现,使用的关键点在于:1=1,当条件不成立时,执行的是:and 1=1,1=1永远成立,所以不影响其他限制条件的执行
3.oracle
上面同样可以也能在oracle中通过decode()函数实现
关键点在于:变量为空的时候,自己=自己,否则的话变量和它作对比。
mysql和oracle的难点在于:想不到原来还可以这样使用。
updateTime--2021年10月28日11:25:29
4.关于mybatis的补充
评论区的园友提出的意见很好,这里对mybatis标签的运用,进行一下补充说明。
第一,where条件后面的动态SQL语句,有两种使用方式。
情形1:where后面的第一个条件是必须存在的,后面的限制条件可有可无
实现方式一:
使用<if></if>标签
1 2 3 4 | where NAME = #{name} < if test="age != null and age != ''"> and AGE = #{age} </ if > |
实现方式二:
使用<where><if></if></where>标签
1 2 3 4 5 6 7 8 | < where > < if test="name != null and name != ''"> and NAME = #{name} </ if > < if test="age != null and age != ''"> and AGE = #{age} </ if > </ where > |
反正name是非空的,就算加上非空判断也是可行。
情形2:where条件后面的条件,都是可有可无的
实现方式一:
使用<if></if>标签
1 2 3 4 5 6 7 | where 1=1 < if test="name != null and name != ''"> and NAME = #{name} </ if > < if test="age != null and age != ''"> and AGE = #{age} </ if > |
实现方式二:
使用<where><if></if></where>标签
1 2 3 4 5 6 7 8 | < where > < if test="name != null and name != ''"> NAME = #{name} </ if > < if test="age != null and age != ''"> and AGE = #{age} </ if > </ where > |
<where>和<if>组合语法说明:
where 元素只有在1个以上的IF条件成立的情况下才会插入“WHERE”子句(当IF条件都不成立时,SQL语句末尾不会有where);
若where后面第一个IF条件成立,且前面带有AND关键词时,会自动将其过滤掉。
其它语法说明:
IF条件的test表达式中的and、or不能用&&、 ||代替,如果非要使用,需要转义;
如果等式(=)左侧是动态字段(变量)的话,正确使用方式为:${变量名},例如:${name}。
与君共勉:最实用的自律是攒钱,最养眼的自律是健身,最健康的自律是早睡,最改变气质的自律是看书,最好的自律是经济独立 。
您的一个点赞,一句留言,一次打赏,就是博主创作的动力源泉!
↓↓↓↓↓↓写的不错,对你有帮助?赏博主一口饭吧↓↓↓↓↓↓
本文来自博客园,作者:Marydon,转载请注明原文链接:https://www.cnblogs.com/Marydon20170307/p/14578783.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix