代码之家  ›  专栏  ›  技术社区  ›  Eduardo Ponce de Leon

Mysql select在返回结果时忽略空值

  •  0
  • Eduardo Ponce de Leon  · 技术社区  · 3 年前

    我有一个表,其中一列除了一行外大部分为空。

    ID STATUS VALUE POS
    1  'BAD'   200   0 
    2   NULL   200   0
    3   NULL   300   1
    4   'OK'    0    2
    

    如果我这样做了

    Select * from table where STATUS != 'OK'
    

    我想

    ID STATUS VALUE POS 
    1  'BAD'   200   0
    2   NULL   200   0
    3   NULL   300   1
    

    但我明白

    ID STATUS VALUE POS 
    1  'BAD'   200   0
    

    我想知道为什么,我知道我可以做其他事情,比如ID=4,但是为什么上面的查询返回空值的结果?

    谢谢

    2 回复  |  直到 3 年前
        1
  •  1
  •   Akina    3 年前

    与空比较总是空的。将NULL视为“未知值”。是否有未知值不等于“OK”?这是未知的。。。所以结果是空的。

    在逻辑表达式中,NULL被视为FALSE。因此,您不会收到想要接收的行。

    必须对空值应用附加检查( WHERE status != 'OK' OR status IS NULL )或者在比较之前将空值转换为某个确定的常量值( WHERE COALESCE(status, '') != 'OK' ).

    注意——这种解释不同于检查约束(包括外键约束)中使用的解释,在检查约束中,空值被视为“匹配”。

        2
  •  1
  •   Adrian Maxwell    3 年前

    不能对空值使用“相等”或“不相等”

    必须 使用 IS NULL IS NOT NULL 例如:

    Select * from table where STATUS != 'OK' OR Status IS NULL