【问题标题】:MySql rows with NULL values are not retriving in select query具有 NULL 值的 MySql 行不会在选择查询中检索
【发布时间】:2013-11-27 05:13:58
【问题描述】:

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

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 从结果中被省略了?我用谷歌搜索了很多,找不到任何答案。我在这里做错了吗?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    试试这个...

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

    【讨论】:

    • 这个工作正常。所以这意味着我必须在每种情况下都添加一个明确的或条件?
    【解决方案2】:

    试试这个

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

    【讨论】:

      【解决方案3】:

      因为NULL相当于UNKNOWN,当你将一个值与UNKNOWN进行比较时,结果总是false

      如果你想获取包含 NULL 的记录,你需要这样重写你的查询 -

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

      【讨论】:

        【解决方案4】:

        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

        【讨论】:

          【解决方案5】:

          你可以使用

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

          【讨论】:

          • 这个也忽略了 NULL 行
          猜你喜欢
          • 2013-09-15
          • 2016-01-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-02
          • 1970-01-01
          • 2016-08-25
          • 1970-01-01
          相关资源
          最近更新 更多