我有一个查询需要根据 Oracle SQL 中的 NOT Equal 值进行过滤。不能使用 EQUAL 作为条件作为未知列的可能值。 询问: 选择 * from employee where name <> 'John';
上面的查询忽略了 name 列中的索引,并且不返回 name 列中具有 null 的行。
Solution Tried for NULL safe return。 SELECT * from employee where name is null OR name <> 'John'; SELECT * from employee where nvl(name, 'NOT John') <> '约翰';
以上两个查询都可以过滤掉空行。 但无法使用名称列中定义的索引。
请指教
索引的目的是快速找到一个特定的值。 “不等于”的条件通常不会因索引而增加。
NULL
值没有索引,所以也没有任何好处。
如果你使用
BITMAP INDEX
,它看起来会有所不同,那里会使用索引。但是,BITMAP 索引还有其他限制,它是否有用取决于您的应用程序和数据。