gpt4 book ai didi

sql - 为什么 SQL 不支持 "= null"而不是 "is null"?

转载 作者:行者123 更新时间:2023-12-03 10:34:57 25 4
gpt4 key购买 nike

我不是在问 如果 确实如此。我知道事实并非如此。

我很好奇原因。我已经阅读过诸如此类的支持文档 on Working With Nulls in MySQL但他们真的没有给出任何理由。他们只重复你必须使用“is null”的口头禅。

这一直困扰着我。在执行动态 SQL 时(那些很少需要执行的情况),将“null”传递到 where 子句中会容易得多,如下所示:

@where = "where GroupId = null"

这将是常规变量的简单替换。相反,我们必须使用 if/else 块来执行以下操作:
if @groupId is null then
@where = "where GroupId is null"
else
@where = "where GroupId = @groupId"
end

在更大的更复杂的查询中,这是一个巨大的痛苦。 SQL 和所有主要 RDBMS 供应商不允许这样做是否有特定原因?它会产生某种关键字冲突或值(value)冲突吗?

编辑:

很多答案的问题(在我看来)是每个人都在 null 和“我不知道值是什么”之间建立了等价关系。这两件事有很大的不同。如果 null 意味着“有一个值但它是未知的”,我会 100% 同意 null 不能相等。但是 SQL null 并不意味着。这意味着有 值(value)。任何两个为空的 SQL 结果都没有值。 值不等于 未知 值(value)。两种不同的东西。这是一个重要的区别。

编辑 2:

我遇到的另一个问题是其他 HLL 允许 null=null 非常好并适本地解决它。例如,在 C# 中,null=null 返回 true。

最佳答案

默认关闭的原因是 null真的不等于null在商业意义上。例如,如果您要加入订单和客户:

select * from orders o join customers c on c.name = o.customer_name

将未知客户的订单与名称未知的客户进行匹配并没有多大意义。

大多数数据库允许您自定义此行为。例如,在 SQL Server 中:
set ansi_nulls on
if null = null
print 'this will not print'
set ansi_nulls off
if null = null
print 'this should print'

关于sql - 为什么 SQL 不支持 "= null"而不是 "is null"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7078837/

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