本功能中函数用于oracle中,其他数据库根据思想自行百度。
问题描述:
在bug修复中发现前辈,条件过滤不充分,为了不破坏原sql结构。尽量加条件。过滤条件,除了and、or、if、group by 、having这些字段。还有一个差集、交集、并集、in、not in。
过滤介绍:
1、其他常用,不做介绍。in和not in有局限,首先in的容量好像不可以放操作1000条数据,如果你的过滤条件会随着时间变化而增加,不要使用in,其二使用in会涉及sql优化失效。
2、当需要过滤的条件有很多值,可以和原来表做交集
例子:
比如数据库一个商品表里面,同一个人有不同的商品订单,商品订单又有多种。我们只要某个人,某种商品的状态数据
数据库表名shop 字段名 id, name, price, address, idcard,status
select * from shop where idcard = '131001'
minus -- 做差集
(
--查询出重复的idcard, 且status=2的数据
select idcard from shop
where status='2'
group by idcard
having count(*)>1
)
解释:
1、第一条sql查出这个人在shop表里面所有状态的商品,
2、第二条sql查出这个人在shop表里面status状态为2的所有数据。
3、做差集结果为,这个人在shop表里面status状态不为2的其他数据
后语:
这个sql是复杂场景下的简化需求。工作原因不能复现问题。大家根据sql思想自己完善。大家有性能好的sql可以提出。
共同探讨学习技术创建技术氛围Day9884125