【问题标题】:Why do I lose NULLs when I filter out a particular value?为什么在过滤掉特定值时会丢失 NULL?
【发布时间】:2021-06-28 03:58:04
【问题描述】:

我有一个数据库,其中有一列工作角色。我的大部分数据点没有工作角色(又名 NULL),但我可以接受。我只想将学生排除在我的桌子之外。所以我只是添加了一个 where 子句

WHERE job_role != 'student'

但令我惊讶的是,我发现 SQL 以这种方式也排除了具有 NULL 值的行。为了解决这个问题,我将 where 子句更改如下:

WHERE job_role != 'student' OR job_role IS NULL

,按预期工作。

但我仍然感到困惑。为什么 SQL 在第一种情况下会排除具有 NULL 值的行?我假设它不是仅仅丢弃具有不需要值的行,而是首先找到具有特定列的值的行,然后只要该值不等于不需要的值就选择该行。

【问题讨论】:

  • 在标准 SQL 中,您可以使用 where job_role is distinct from 'student' 包含为空的值。但并非所有 DBMS 产品都支持该运算符。

标签: sql null where-clause


【解决方案1】:

NULL 值是一个特殊值,在语义上表示“未知”。因此,在下面的表达式中:

WHERE job_role != 'student'

如果job_roleNULL,则不能肯定地说它不等于'student'。所以NULL != 'student' 也计算为NULL,表示不知道这个断言是否为真。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    • 2022-01-21
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多