gpt4 book ai didi

SQL:为什么在此 where 子句中过滤掉 NULL 值?

转载 作者:行者123 更新时间:2023-12-04 16:18:59 25 4
gpt4 key购买 nike

在我的表中,我有一个可为空的位列(旧系统...),另一位开发人员最近对存储过程进行了更改,以仅显示位列不为真的值 (1)。因为这是一个可为空的列,我们注意到如果该列为 NULL,则记录不会被拾取。为什么是这样?

其他开发人员和我都同意 NULL <> 1 ... 这是 SQL 中的错误还是以这种方式设计的?好像是设计缺陷。

当前代码:

(VoidedIndicator <> 1)

建议修复:
(VoidedIndicator <> 1 OR VoidedIndicator IS NULL)

澄清(由 Jon Erickson)

VoidedIndicator 是一个可为空的位字段,因此它可以具有以下值:NULL、0 或 1

当使用 where 子句(例如 (VoidedIndicator <> 1))创建 SQL 语句时,我们只会返回具有 VoidedIndicator == 0 的记录,但我们期望 VoidedIndicator == 0 和 VoidedIndicator IS NULL。为什么是这样?

最佳答案

很多很好的答案,但让我给你一个非常简洁的版本。

对于 SQL,Null 并不意味着“无值”,它意味着“未知值”

考虑到这一点,请考虑用简单的英语回答您问 SQL 的问题。

Q: Is this unknown value not equal to 1? 
A: I don't know, there is no way to tell without knowing the value.

Hence Null<>1 = Null

关于SQL:为什么在此 where 子句中过滤掉 NULL 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/683627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com