查询 returns 如果比较列为 NULL,则无结果
Query returns no result if compared column is NULL
假设我在 Oracle 11g 数据库中有以下 table (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 和 'Mikola' 并不像我期望的那样有效。 Null 确实不等于 'Mikola',所以有什么问题。作为解决方法,我这样做:
SELECT * FROM T1 WHERE MiddleName<>'Mikola' or MiddleName is NUll;
我不记得以前遇到过这个问题。这是 11g 的新行为还是一直如此?
此行为较早发生(不知道是否一直如此)。见解释:http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements005.htm
你可以试试这个:SELECT * FROM T1 WHERE NVL(MiddleName, 'NULL') <>'Mikola';
你可以试试这个:
SELECT * FROM T1 WHERE MiddleName not in ('Mikola');
假设我在 Oracle 11g 数据库中有以下 table (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 和 'Mikola' 并不像我期望的那样有效。 Null 确实不等于 'Mikola',所以有什么问题。作为解决方法,我这样做:
SELECT * FROM T1 WHERE MiddleName<>'Mikola' or MiddleName is NUll;
我不记得以前遇到过这个问题。这是 11g 的新行为还是一直如此?
此行为较早发生(不知道是否一直如此)。见解释:http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements005.htm
你可以试试这个:SELECT * FROM T1 WHERE NVL(MiddleName, 'NULL') <>'Mikola';
你可以试试这个:
SELECT * FROM T1 WHERE MiddleName not in ('Mikola');