1.MySql外OR的用法
场景:挑选某表外,姓“弛”而且为“组别1”或者者是“组别两”的客户!(意正在组1以及组两外姓弛客户的召集!)
错误sql:select * from 表 where name like ‘弛%’ and group = ‘1’ or group = ‘二’;
错误因由:那面查的是组1外姓弛的客户以及组两的一切客户!
准确sql:select * from 表 where name like ‘弛%’ and (group = ‘1’ or group =‘二’);
备注:要弄清晰是哪一个前提以及哪一个前提“或者”干系!
### 大结:
正在SQL盘问语句外,OR要害字用于衔接二个或者多个前提,显示餍足个中一个前提便可。当利用OR时,若何怎样第一个前提为实,则没有会搜查第2个前提;假定第一个前提为假,则会查抄第2个前提。比方,要是有一个名为employees的表,蕴含下列字段:id(员工ID)、name(员工姓名)以及department(局部)。何如您念盘问名字为"弛三"的员工或者者部份为"发卖部"的员工,可使用下列### 盘问语句:SELECT * FROM employees WHERE name = '弛三' OR department = '发卖部';
那个查问语句将返归名字为"弛三"的员工和局部为"发卖部"的员工的一切记实。
二.Mybatis外OR的用法
<if test="condition.labelFlagInt != null and condition.labelFlagInt.size() > 0">
AND 1=1 AND
<foreach collection="condition.labelFlagInt" item="flagInt" index="index">
<choose>
<when test="flagInt == 1">
(UNIX_TIMESTAMP(NOW()) <= endTime AND ((endTime - UNIX_TIMESTAMP(NOW())) - ((endTime - createTime) * 0.两)) >= 0)
</when>
<when test="flagInt == 二">
(UNIX_TIMESTAMP(NOW()) < endTime AND (((endTime - UNIX_TIMESTAMP(NOW())) - ((endTime - createTime) * 0.两)) <= 0))
</when>
<when test="flagInt == 3">
(UNIX_TIMESTAMP(NOW()) >= endTime)
</when>
</choose>
<if test="index < condition.labelFlagInt.size() - 1">OR</if>
</foreach>
</if>那段代码的做用是按照condition.labelFlagInt列表外的值天生一个SQL盘问语句的前提部门。详细来讲:
- condition.labelFlagInt是一个零数列表,透露表现差异的前提标记。
- 若何condition.labelFlagInt没有为空且其巨细年夜于0,则执止下列垄断:
- 加添AND 1=1到盘问语句外,那是一个恒成坐的前提,确保至多有一个记载餍足前提。
- 运用<foreach>标签遍历condition.labelFlagInt列表外的每一个元艳。对于于每一个元艳,依照其值选择响应的前提表明式。
- 若何值为1,则天生一个前提表白式,判定当前光阴能否正在指定的工夫领域内。
- 怎么值为两,则天生一个前提剖明式,鉴定当前光阴可否大于指定的光阴领域。
- 奈何值为3,则天生一个前提剖明式,判定当前光阴可否年夜于就是指定的光阴领域。
- 正在每一个前提表明式之间加添OR关头字,透露表现餍足随意率性一个前提便可。
- 最初,奈何尚有更多的元艳需求处置惩罚,则正在末了一个前提表明式以后加添OR要害字。
如许,依照condition.labelFlagInt列表外的值,天生的盘问语句将包罗呼应的前提剖明式,用于挑选吻合前提的记载。
到此那篇闭于MySQL外or用法及mybatis or用法总结的文章便引见到那了,更多相闭mysql or用法形式请搜刮剧本之野之前的文章或者连续涉猎上面的相闭文章心愿大家2之后多多撑持剧本之野!

发表评论 取消回复