Oracle中,关于空值的问题

在oracle数据库中,空值是一个特殊的。比如要查询出一个表中,某个字段为空或者不为空的数据,不能直接用=或者<>,要使用is null或者is not null
以上可以说是一个常识性问题,一般都不会犯。不过,下面要说的问题,可能会被大多数人忽略:

背景

比如,在权限系统中,根据角色ID,要找出具有这个角色的用户和不具有这个角色的用户。所以,这里相关的表有fyk_user(用户表)、fyk_user_role(用户和角色的关联关系表)。

问题分析

先来看下不带条件输出的结果,所有的用户共有11个,其中只有两个用户和角色关联了。
在这里插入图片描述
如果现在我需要找出没有关联到角色ID为1的所以用户,以便给他们赋值该角色。那么我所期望的应该是找出9个用户(3~11)
,所以加上条件:where ur.role_id <> ‘1’
在这里插入图片描述
结果是一条数据也查不出来。其实,这里就犯了一开始说的那种错误,空值的比较,是不能用=或者!=的。

解决方法

在条件上,在加上空值的判断:where ur.role_id <> ‘1’ or ur.role_id is null
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值