具有NULL值的MySql行不会在select查询中检索

时间:2013-11-27 05:13:59

标签: mysql sql

我遇到一个简单的选择查询的奇怪问题,无法找到正在发生的事情。我在sql下面使用从customer表中获取一些记录。我的查询如下。

SELECT `C`.* FROM `customers` AS `C` WHERE `C`.`typeId`!=9 ORDER BY C.name ASC 

我的表格结构如下

|id|name|typeId|
|1 |abc |1     |
|2 |abcd|9     |
|3 |xxxx|NULL  |
|4 |qwe |NULL  |
|5 |xvf |10    |

在上表中,typeId是一个整数字段,默认为NULL。数据库是MySql

当我执行上面提到的SQL时,我得到除了typeId = 9和typeId = NULL之外的所有其他行。我的问题是为什么从结果中省略了typeId = NULL?我google了很多,无法找到任何答案。我在这里做错了吗?

5 个答案:

答案 0 :(得分:4)

试试这个......

SELECT `C`.* 
FROM `customers` AS `C` 
WHERE `C`.`typeId`!=9 
   OR `C`.`typeId` IS NULL 
ORDER BY C.name ASC 

答案 1 :(得分:2)

试试这个

  

SELECT C。* FROM customers AS C WHERE CtypeId!= 9 OR CtypeId是否为C.name ASC的命令

答案 2 :(得分:2)

因为NULL等同于UNKNOWN,并且当您将值与UNKNOWN进行比较时,结果将始终为 false

如果要获取包含NULL的记录,则需要以这种方式重新编写查询 -

where `C`.`typeId` <> 9
OR `C`.`typeId` is null;

答案 3 :(得分:1)

NULL不会比较等于任何东西。您需要明确接受空值:只需添加

AND C.typeId IS NOT NULL
查询中的

也是

在此处查看NULL http://dev.mysql.com/doc/refman/5.0/en/working-with-null.html

也请检查以下问题: - NULL values in where clause

答案 4 :(得分:1)

您可以使用

SELECT id,
       name,
       COALESE(typeId,0) AS type
FROM customers AS C 
WHERE C.type!=9  
ORDER BY C.name ASC