今天再写项目的时候碰到一个问题,感觉很奇怪。
情景是这样的
我的数据库中的CREDENTIALS_TYPE下有三种类型的值,身份证,公司,null,在我使用CREDENTIALS_TYPE!='公司'时,只显示CREDENTIALS_TYPE为身份证的值,为null的数据怎么也查不出来,
后面问过大神,他是这样说的:
使用 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中还是有很多坑的啊。
仅此做个笔记,以防后面再次碰到再掉坑里