数据库查询过滤条件

本功能中函数用于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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值