我遇到一个简单的选择查询的奇怪问题,无法找到正在发生的事情。我在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了很多,无法找到任何答案。我在这里做错了吗?
答案 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
。* FROMcustomers
ASC
WHEREC
。typeId
!= 9 ORC
。typeId
是否为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