表结构如下

查询一:查询name在 ‘111’,‘222’,‘liuyao’,‘zhai’ 之间任意一个,或者age等于20的数据(如果条件是并且,使用and)

SELECT * from user
WHERE 1=1
and name in ('111','222','liuyao','zhai')
or age = 20

查询结果:可以看出满足上述条件 ,但test3这条数据有重复

查询二:查询name在 ‘111’,‘222’,‘liuyao’,‘zhai’ 之间任意一个,或者age等于20的数据,并且按照name对数据去重

如果数据库有两条数据一模一样,使用下边的sql即可去重
select distinct * from table(表名) where (条件)

但是本次的数据结构有唯一id 不符合上述条件,需要这样来去重
①:先查出满足条件的全部数据
②:对满足条件的数据按照name过滤
③:取所有过滤后数据的id
④:查询id 在过滤后id内的所有数据,即可去重!

SELECT * from user
where id in (select id from(SELECT * from user WHERE 1=1and name in ('111','222','liuyao','zhai')or age = 20) agroup by name )

查询结果:

查询三:查询name在 ‘111’,‘222’,‘liuyao’,‘zhai’ 之间任意一个,或者age等于20,并且tel等于 45465 的数据

这个查询条件是要在(查询name在 ‘111’,‘222’,‘liuyao’,‘zhai’ 之间任意一个,或者age等于20)的查询结果中,只要tel等于 45465 的数据
需要注意的是多个and 和 or之间的运用
当使用or时,需要给当前条件加上() 否则查询结果不成立

SELECT * from user WHERE 1=1    and (name in ('111','222','liuyao','zhai')                      or age = 20)and tel = '45465'

查询结果

2.mybatis查询案例 (and 和 or)

①:查询条件 (and的使用)

1.一个用户 只能查询出 投保人张三、李四 和 被保人王五、老刘 的数据
2.select后的查询条件是动态的(采用非预编译模式${},列上没有双引号)

mybatis代码

 <select id="selectPolicyBySqlSimple2" resultType="java.util.Map">select ${projevtVo.columnSql1}  //动态列,采用非预编译模式${},列上没有双引号 ‘’from cmain cleft join ods_cmain oon c.policyNo = o.policyNoleft join carMain mon c.policyNo = m.policyNoleft join ( select a.policyNo,b.BrandName from carMain a,car.carbrand b where a.brandcode = b.BRANDCODE) don c.policyNo = d.policyNo<where>1=1//投保人张三、李四<if test="projevtVo.appliNameVal != null and projevtVo.appliNameVal != ''">and   c.appliName in<foreach collection="projevtVo.appliNameVal" item="singleVal1" separator="," open="(" close=")">#{singleVal1}</foreach></if>//被保人王五、老刘 <if test="projevtVo.insuredNameVal != null and projevtVo.insuredNameVal != ''">and c.insuredName in<foreach collection="projevtVo.insuredNameVal" item="singleVal2" separator="," open="(" close=")">#{singleVal2}</foreach></if>//其他过滤条件<if test="projevtVo.carNum != null and projevtVo.carNum != '' ">and c.carNum = #{projevtVo.carNum}</if><if test="projevtVo.policyNo != null and projevtVo.policyNo != ''">and c.policyNo = #{projevtVo.policyNo}</if><if test="projevtVo.appliName != null and projevtVo.appliName != ''">and c.appliName = #{projevtVo.appliName}</if><if test="projevtVo.proposalno != null and projevtVo.proposalno != '' ">and o.proposalno = #{projevtVo.proposalno}</if><if test="projevtVo.policyStatus != null and projevtVo.policyStatus != ''">and c.policyStatus = #{projevtVo.policyStatus}</if><if test="projevtVo.riskName != null and projevtVo.riskName != ''">and c.riskName = #{projevtVo.riskName}</if><if test="projevtVo.insuredName != null and projevtVo.insuredName != '' ">and c.insuredName = #{projevtVo.insuredName}</if><if test="projevtVo.carOwner != null and projevtVo.carOwner != ''">and m.carOwner = #{projevtVo.carOwner}</if><if test="projevtVo.frameNo != null and projevtVo.frameNo != ''">and m.frameNo = #{projevtVo.frameNo}</if>//日期过滤<if test="projevtVo.dateType != null and projevtVo.dateType != ''">and ${projevtVo.dateType} between #{projevtVo.startDate} and #{projevtVo.endDate}</if></where><select>

②查询条件(or的使用)
1.一个用户 即能查询出 投保人张三、李四 又能查出 被保人王五、老刘 的所有涉及到的数据(or)
2.select后的查询条件是动态的(采用非预编译模式${},列上没有双引号)

mybatis的sql

在这里插入代码片
 <select id="selectPolicyBySqlSimple2" resultType="java.util.Map">select ${projevtVo.columnSql1} // //动态列,采用非预编译模式${},列上没有双引号 ‘’from cmain cleft join ods_cmain oon c.policyNo = o.policyNoleft join carMain mon c.policyNo = m.policyNoleft join ( select a.policyNo,b.BrandName from carMain a,car.carbrand b where a.brandcode = b.BRANDCODE) don c.policyNo = d.policyNo<where>  //  <where>可以动态的添和删除 sql前的 and 或 or1=1//使用or的sql需要使用 and() 包起来,否则查询结果错误!and (//投保人张三、李四<if test="projevtVo.appliNameVal != null and projevtVo.appliNameVal != ''">c.appliName in<foreach collection="projevtVo.appliNameVal" item="singleVal1" separator="," open="(" close=")">#{singleVal1}</foreach></if>//被保人王五、老刘 <if test="projevtVo.insuredNameVal != null and projevtVo.insuredNameVal != ''">or c.insuredName in<foreach collection="projevtVo.insuredNameVal" item="singleVal2" separator="," open="(" close=")">#{singleVal2}</foreach></if>// or查询条件结束 -----)<if test="projevtVo.carNum != null and projevtVo.carNum != '' ">and c.carNum = #{projevtVo.carNum}</if><if test="projevtVo.policyNo != null and projevtVo.policyNo != ''">and c.policyNo = #{projevtVo.policyNo}</if><if test="projevtVo.appliName != null and projevtVo.appliName != ''">and c.appliName = #{projevtVo.appliName}</if><if test="projevtVo.proposalno != null and projevtVo.proposalno != '' ">and o.proposalno = #{projevtVo.proposalno}</if><if test="projevtVo.policyStatus != null and projevtVo.policyStatus != ''">and c.policyStatus = #{projevtVo.policyStatus}</if><if test="projevtVo.riskName != null and projevtVo.riskName != ''">and c.riskName = #{projevtVo.riskName}</if><if test="projevtVo.insuredName != null and projevtVo.insuredName != '' ">and c.insuredName = #{projevtVo.insuredName}</if><if test="projevtVo.carOwner != null and projevtVo.carOwner != ''">and m.carOwner = #{projevtVo.carOwner}</if><if test="projevtVo.frameNo != null and projevtVo.frameNo != ''">and m.frameNo = #{projevtVo.frameNo}</if><if test="projevtVo.dateType != null and projevtVo.dateType != ''">and ${projevtVo.dateType} between #{projevtVo.startDate} and #{projevtVo.endDate}</if></where><select>

sql去重、or、in、and、groupby的使用相关推荐

  1. 哈希冲突 | 数据倾斜 | SQL去重

    哈希冲突      解决哈希冲突的常用方法分析 - 云+社区 - 腾讯云 哈希冲突:由于哈希算法被计算的数据是无限的,而计算后的结果范围有限,因此总会存在不同的数据经过计算后得到的值相同,这就是哈希冲 ...

  2. sql去重常用的基本方法

    sql去重常用的基本方法 1.存在两条完全相同的纪录 select distinct * from table(表名) where (条件) 2.存在部分字段相同的纪录(有主键id即唯一键) 如果是这 ...

  3. sql去重查询的方法

    sql去重查询的方法 sql去重查询的方法:重复记录根据单个字段peopleId来判断,使用语句删除,代码为[where peopleId in (select peopleId from peopl ...

  4. SQL去重的三种方法汇总

    SQL去重的三种方法汇总 这里的去重是指:查询的时候, 不显示重复,并不是删除表中的重复项 1.distinct去重 注意的点:distinct 只能一列去重,当distinct后跟大于1个参数时,他 ...

  5. sql去重和代码去重

    最近做项目,两张表都是百万数据的表,其中一主一从,客户要根据主表从从表中获取一条有效数据,从表数据很多脏数据,开始用sql去重发现速度很慢,后来用代码去重了 列表查询,一般就是几十条数据,先查出主表i ...

  6. 测一测自己的Sql能力之MYSQL的GROUPBY你弄懂了吗?

    场景描述如下: 订单表 (包含字段有:订单ID[自增].客户ID.下单时间.订单金额.商品名称), 采用一个SQL语句,查询出: 每一位客户最后一次的下单时间.订单金额.商品名称:以及每一位客户的累计 ...

  7. SQL去重是用DISTINCT好,还是GROUP BY好?

    点击上方SQL数据库开发,关注获取SQL视频教程 SQL专栏 SQL基础知识汇总 SQL高级知识汇总 我们知道DISTINCT可以去掉重复数据,GROUP BY在分组后也会去掉重复数据,那这两个关键字 ...

  8. SQL去重的三种方法汇总 ​

    欢迎关注方志朋的博客,回复"666"获面试宝典 在使用SQL提数的时候,常会遇到表内有重复值的时候,比如我们想得到 uv (独立访客),就需要做去重. 在 MySQL 中通常是使用 ...

  9. SQL去重的三种方法

    目录 1.distinct去重 2.group by去重 3.row_number() over (parttion by 分组列 order by 排序列) 有这么一张test的表, 我们将对这张表 ...

最新文章

  1. 网络带宽与传输性能的基本计算方法
  2. Aix netstat命令解析
  3. 008. 限制上传文件的大小
  4. C++ 学习之旅(13)——枚举enum
  5. python re 简单实例_python的re模块应用实例
  6. 2015-12-01 SQL查询语句基础
  7. 三星android webview,[转]三星GS4(Android 4.3)上webview crash问题
  8. Facebook全面实施GDPR 用户Pages页面被随意锁定
  9. Final Project 期末项目: PySnake
  10. 激活windows错误代码 0x80072F8F
  11. 嵌入式 配置arm工具链
  12. 整理2004-2018年地级市进出口贸易总额数据
  13. 这四十年来的香港歌坛在唱些什么,“南中国听歌最多”的数据分析师带你一探究竟...
  14. 远程互动 gk服务器,不要错过!GKUI APP远程控制教程
  15. 群晖 使用SMB3进行局域网传输双倍叠加网速下踩的一些坑
  16. python办公自动化:让PyAutoGUI来帮你干活---实践版
  17. 学以致用、知行合一:实践论与工具论的统一
  18. 学习matlab(四)——概率与数理统计
  19. 崭新朕亨公益公司 Kickstarter在创业公司中走出全新一条路
  20. ppa安装java_通过 ppa 在ubuntu server 上安装java 8

热门文章

  1. c++可视化_数据可视化——如何让你的信息图被记住
  2. ASP.NET Core 设置允许跨域访问
  3. Mysql(一)——基础知识
  4. vue ref 属性
  5. for ihs linux_Install WAS6.1+IHS for Linux(64bit)
  6. YII 规则rule 里面 min,max 提示错误信息
  7. How to enable nested virtualization in KVM
  8. background-origin:规定 background-position 属性相对于什么位置来定位
  9. RsyncServer服务无法启动的解决方法
  10. “中华姓氏文化归心工程”在京启动