相关疑难解决方法(0)

为什么NULL = NULL在SQL Server中评估为false

在SQL Server中,如果 nullParam=NULL在where子句中,它总是计算为false.这是违反直觉的,并且给我带来了许多错误.我确实理解IS NULLIS NOT NULL关键字是正确的方法.但是为什么SQL服务器会以这种方式运行?

sql sql-server null

137
推荐指数
10
解决办法
11万
查看次数

IS NULL和= NULL之间有什么区别吗?

我很惊讶地看到IS NULL和= NULL在select查询中产生不同的结果.他们之间有什么区别?什么时候用.如果你能详细解释我,我会很高兴的.

sql sql-server sql-server-2005

42
推荐指数
3
解决办法
2万
查看次数

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

我没有问,如果它.我知道事实并非如此.

我很好奇原因.我已经阅读了支持文档,例如关于在MySQL中使用Nulls的支持文档,但它们并没有给出任何理由.他们只重复你必须使用的"是空"的口头禅.

这一直困扰着我.在进行动态SQL(那些必须要做的极少数时间)时,将"null"传递给where子句会更容易:

@where = "where GroupId = null"
Run Code Online (Sandbox Code Playgroud)

这将是常规变量的简单替换.相反,我们必须使用if/else块来执行以下操作:

if @groupId is null then
     @where = "where GroupId is null"
else
     @where = "where GroupId = @groupId"
end
Run Code Online (Sandbox Code Playgroud)

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

编辑:

许多答案的问题(在我看来)是每个人都在设置null和"我不知道它的值是什么"之间的等价.这两件事之间存在巨大差异.如果null意味着"有一个值,但它是未知的"我会100%同意空值不能相等.但SQL null并不意味着.这意味着没有价值.任何两个为null的SQL结果都没有值. 没有价值不等于未知价值.两件不同的事情.这是一个重要的区别.

编辑2:

我遇到的另一个问题是其他HLL允许null = null完全正常并适当地解决它.例如,在C#中,null = null返回true.

sql null

25
推荐指数
5
解决办法
6681
查看次数

为什么null不等于null false

我正在读这篇文章: 在SQL中获取null == null

并且一致认为,当尝试测试两个(可为空)sql列之间的相等性时,正确的方法是:

where ((A=B) OR (A IS NULL AND B IS NULL))
Run Code Online (Sandbox Code Playgroud)

当A和B为NULL时,(A = B)仍然返回FALSE,因为NULL不等于NULL.这就是需要额外检查的原因.

在测试不平等时呢?根据上面的讨论,它让我认为,为了测试不平等,我需要做一些像:

WHERE ((A <> B) OR (A IS NOT NULL AND B IS NULL) OR (A IS NULL AND B IS NOT NULL))
Run Code Online (Sandbox Code Playgroud)

但是,我注意到这没有必要(至少在informix 11.5上没有),我可以这样做:

where (A<>B)
Run Code Online (Sandbox Code Playgroud)

如果A和B为NULL,则返回FALSE.如果NULL不等于NULL,那么这不应该返回TRUE吗?

编辑
这些都是很好的答案,但我认为我的问题有点模糊.请允许我改写一下:

鉴于A或B都可以为NULL,是否足以检查它们的不等式

where (A<>B)
Run Code Online (Sandbox Code Playgroud)

或者我需要明确检查它:

WHERE ((A <> B) OR (A IS NOT NULL AND B IS NULL) OR (A IS NULL AND B IS NOT NULL))
Run Code Online (Sandbox Code Playgroud)

请参阅此主题以获得此问题的答案.

sql database null nullable

21
推荐指数
3
解决办法
3万
查看次数

在where子句+ SQL Server中IS NULL vs = NULL

如何检查值IS NULL [or] = @param(@param为null)

例如:

Select column1 from Table1
where column2 IS NULL => works fine
Run Code Online (Sandbox Code Playgroud)

如果我想用@param替换比较值(IS NULL).如何才能做到这一点

Select column1 from Table1
where column2 = @param => this works fine until @param got some value in it and if is null never finds a record.
Run Code Online (Sandbox Code Playgroud)

这怎么能实现?

sql t-sql sql-server

18
推荐指数
2
解决办法
7万
查看次数

标签 统计

sql ×5

null ×3

sql-server ×3

database ×1

nullable ×1

sql-server-2005 ×1

t-sql ×1