mysql exists的使用

标签: mysql exists使用, exists子查询,exists的用法
exists的用途: exists 用于查看子查询是否有符合条件的数据,返回值是boolean,一般用于sql语句的排查(符合条件的、不符合条件的)

1. 首先我们设定一个业务场景: 以工单系统为例, 分为业务系统入云申请、系统上线、资源变更、系统退出四大功能
2. 设计数据库: 
    1. 工单的基本信息部分是不变的,所以将工单基础部分设为工单基础数据表(order),工单的每一次操作(入云、上线、变更、退出)都会复制一条工单基础信息并设置工单类型(order_type)
    2. 工单入云表、记录工单入云信息(order_cloud)
    3. 工单上线表、记录工单上线信息(order_online)
    4. 工单变更表、记录工单变更信息(order_alteration)
    5. 工单退出表、记录工单退出信息(order_secede)
    我们将工单分为五个表, 一个基础表和四个业务表,业务主键为基础数据(order)的主键

3. exists 的使用
    参数设定
    sign_type: 审批类型
    order_type:工单类型(0入云、1上线、2变更、3退出)

案例1: 查询所有可上线的工单 not exists的使用
    条件1: 已入云成功
    条件2:工单没有退出与审核中的
    条件3:工单没有上线的

// 查询所有已入云成功的工单
select * from order o where o.status=1 and o.sign_type=已通过入云 and o.order_type=0
// 工单上线审批中或审批通过的不允许再上线
and not exists(select * from order_online on where o.id=on.id and on.order_type=1 and  on.sign_type in (审批通过、审批中) )
// 工单退出审批中或审批通过的不允许再上线
and not exists(select * from order_secede sec where o.id=sec.id and sec.order_type=3 and  sec.sign_type in (审批通过、审批中) )

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值