Oracle中NOT IN的问题

     今天在开发的时候需要查询数据库中哪些学生有多个学号,写的sql如下:

     select * from(
  select count(t1.xh) as xhs,t2.uuid,t3.xm as xsxm,t3.sfzjh, t1.xjzt as xjzt from hust_xs_jb t1
   INNER JOIN hust_xx_identity t2 on t1.sfid= t2.sfid
    INNER JOIN hust_xx_profile t3 on t2.uuid=t3.uuid group by t2.uuid ,t3.xm, t3.sfzjh, t1.xjzt order by t3.xm) t
  where xhs>=2 and xjzt not in('15','17','19','21','30','31','32','33','34','35','36','37','38','39','40','51','52','53','54')

 

查出的数据为空,但是去掉where条件中的第二个条件(也就是NOT IN条件)却能查出31条数据,且其中只有一条的数据的XJZT字段为33,其他的都为null,应该查出30条数据啊,这是为什么呢?难道NOT  IN会将null值过滤掉?于是将sql稍加修改:

 

     select * from(
  select count(t1.xh) as xhs,t2.uuid,t3.xm as xsxm,t3.sfzjh, t1.xjzt as xjzt from hust_xs_jb t1
   INNER JOIN hust_xx_identity t2 on t1.sfid= t2.sfid
    INNER JOIN hust_xx_profile t3 on t2.uuid=t3.uuid group by t2.uuid ,t3.xm, t3.sfzjh, t1.xjzt order by t3.xm) t
  where xhs>=2 and (xjzt not in('15','17','19','21','30','31','32','33','34','35','36','37','38','39','40','51','52','53','54') or xjzt is null)

 

就能查出所需要的30条数据了。网上查了一下,说Oracle not in 如果返回的有null值的话,就不会有记录。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值