SQL NULL值比较陷阱
数据库里null值的比较是一件非常坑爹事情,一不小心就会掉到陷阱里去。以一个非常常见的场景为例:
SELECT * FROM some_table WHERE field1 = field2
看上去没什么问题吧。错了!如果field1、field2中有一个值为null,那么结果就会变得很神奇。
下面列出各种情况,你可以先不看答案,看看你能猜对几个
SQL
结果
select 1 from dual where null=null
什么都没有
select 1 from dual where nullnull
什么都没有
select 1 from dual where 1=null
什么都没有
select 1 from dual where 1null
什么都没有
看到没有,你不能拿null用来做比较,即使是拿null和null比。一旦你怎么做,其结果肯定是false。
正确的做法
如果你要对(可能会对)null值做比较,安全且正确的做法是使用nvl
SELECT * FROM some_table WHERE nvl(field1, null_if_value)=nvl(field2, null_if_value)
就如上面的
SQL
结果
select 1 from dual where nvl(null,-1)=nvl(null,-1)
1
select 1 from dual where nvl(null,-1)nvl(null,-1)
什么都没有
select 1 from dual where 1=nvl(null,-1)
什么都没有
select 1 from dual where 1nvl(null,-1)
1
关键字:sql, oracle, null, select
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!