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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部