一定记得,在sql中,筛选出需要的数据,永远比筛选掉不需要的数据好筛选的多
就是,当需要筛选出同时满足一个表中的两个字段的两个条件的数据,就不能筛选掉不需要的数据,需要筛选出自己需要的数据,
将不需要的数据排除在外。
例如:
昨天做的一个需求,在服务商的申请结算的单据表中,应为需要数据备份,所以需要筛选掉当fm.audit_state=1 && fm.exception_second_submit=1的数据,
fm.exception_second_submit=1 这个筛选条件是二次审核提交的状态
这样的话,想着去筛选掉这条数据就不现实
写where语句
where fm.audit_state!=1 and fm.exception_second_submit!=1
这样的话就会把正在审核的单据过滤掉,直接写
where fm.exception_second_submit!=1
的话也不行,fm.exception_second_submit=1 这个筛选条件是二次审核提交的状态,所以直接 !=1进行过滤的话,会把二次提交的也过滤掉
所以直接通过过滤出需要的数据的方法才能实现
sql写法为:
where fm.settlement_id = #{settlementId,jdbcType=INTEGER} and ((fm.AUDIT_STATE in (1,2,3,4) and fm.exception_second_settlement is null ) or (fm.AUDIT_STATE in (1,2,3,4) and (fm.exception_second_settlement in (2,3))))
过滤出 fm.AUDIT_STATE 为状态 (1,2,3,4) ,(fm.exception_second_settlement in (2,3)的数据