今天再写项目的时候碰到一个问题,感觉很奇怪。
情景是这样的
我的数据库中的CREDENTIALS_TYPE下有三种类型的值,身份证,公司,null,在我使用CREDENTIALS_TYPE!='公司'时,只显示CREDENTIALS_TYPE为身份证的值,为null的数据怎么也查不出来,
![](https://i-blog.csdnimg.cn/blog_migrate/b292e05fac2dd4c465ab312e59f41315.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7cc18fe314b9846baccb709f8b9b69f4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4ec31f14cb5c829cd51ccf0b49aa5c78.png)
后面问过大神,他是这样说的:
使用 select * from bao_t_cust_info where CREDENTIALS_TYPE='null'
也是没有结果的。因为Oracle的算法中:
null=null是false null is null 是true,
select * from table where CREDENTIALS_TYPE!='公司'
和
select * from table where CREDENTIALS_TYPE='身份证' or CREDENTIALS_TYPE is null
select * from table where CREDENTIALS_TYPE='身份证' or CREDENTIALS_TYPE is null并不等价。
所以在查询有null值的数据时,尽量使用is null。感觉Oracle中还是有很多坑的啊。
仅此做个笔记,以防后面再次碰到再掉坑里