我们想写这个查询:
select * from table where col1 != 'blah' and col2 = 'something'
我们希望查询包含col1为null的行(而col2 ='something').目前,查询不会对col1为null的行执行此操作.以下查询是最好还是最快的方法吗?
select * from table where (col1 != 'blah' or col1 is null) and col2 = 'something'
或者,如果需要,我们可以将所有col1 null值更新为空字符串.这会是一个更好的方法吗?然后我们的第一个查询将工作.
更新:Re:使用NVL:我在另一篇文章中读到,从性能角度来看,这不是一个很好的选择.
在Oracle中,空字符串和NULL之间没有区别.
这是公然无视SQL标准,但你去...
除此之外,你无法与"普通"运算符比较NULL(或非NULL):"col1 = null"不起作用,"col1 =''"不起作用,"col1!= null"将不起作用,你必须使用"是null".
所以,不,你不能以任何其他方式使这项工作,然后"col 1为null"或其中的一些变化(例如使用nvl).