假设我在Oracle 11g数据库中有以下表(t1),其中包含一些示例数据:
LastName | MiddleName | FirstName
Spencer Davids Mark
Zola *NULL* Francesca
Myers Christian Frank
Bugatti *NULL* Ziona
当我运行以下查询时,我希望获得所有4行:
SELECT * FROM T1 WHERE MiddleName<>'Mikola';
但我只得到2条记录。未检索MiddleName为null的那些。所以比较Null和&#39; Mikola&#39;不像我期望的那样工作。 Null确实不等于&#39; Mikola&#39;,那么问题是什么。作为一种解决方法,我这样做:
SELECT * FROM T1 WHERE MiddleName<>'Mikola' or MiddleName is NUll;
我以前不记得面对这个问题。这是11g的新行为还是一直如此?
答案 0 :(得分:1)
此行为发生得更早(不知道是否总是如此)。请参阅说明:http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements005.htm
您可以尝试:SELECT * FROM T1 WHERE NVL(MiddleName,&#39; NULL&#39;)&lt;&gt;&#39; Mikola&#39;;
答案 1 :(得分:1)
你可以试试这个:
SELECT * FROM T1 WHERE MiddleName not in ('Mikola');