我不是在问if确实如此。我知道事实并非如此。
我很好奇原因。我已阅读过诸如此之类的支持文档关于在 MySQL 中使用 Null 值 http://dev.mysql.com/doc/refman/5.0/en/working-with-null.html但他们并没有真正给出任何理由。他们只是重复你必须使用“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 供应商不允许这样做有什么具体原因吗?它会产生某种关键字冲突或值冲突吗?
Edit:
许多答案的问题(在我看来)是每个人都在 null 和“我不知道值是什么”之间建立等价关系。这两件事之间有很大的区别。如果 null 意味着“有一个值,但它是未知的”,我将 100% 同意 null 不能相等。但 SQL null 并不意味着这个。这意味着有no价值。任意两个为 null 的 SQL 结果都没有值。No值不等于unknown价值。两种不同的东西。这是一个重要的区别。
Edit 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'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)