0

这也可能是其他数据库中的情况,但是当您进行以下查询时

SELECT * FROM MyTbl WHERE MyColumn != 'Foo'

然后获取 MyColumn 为“Bar”的任何记录,但未获取 MyColumn 为 NULL 的任何记录。我认为这是预期的行为,并且背后有原因,我想知道原因。

NULL 是否被认为等于 'Foo' 或者它只是不期望成为条件的一部分,因为条件 (NULL != 'Foo') 似乎为真。

4

4 回答 4

5

在 DB 逻辑中,NULL意味着该字段中根本没有定义的数据。它被认为与任何事物都不相同或不同。如果要获取相关行,则必须对其进行显式过滤:

SELECT * FROM MyTbl WHERE MyColumn != 'Foo' OR MyColumn IS NULL

参见维基百科

于 2013-01-14T13:52:06.597 回答
1

在 SQL Server 中工作的三态逻辑,这意味着NULL = NULL UNKNOWN which treats as FALSE

于 2013-01-14T13:52:12.370 回答
0

在所有关系数据库中,空值不等于任何东西,包括它自己。

即使您的查询是 ,您也无法找到 MyColumn 具有空值的行"select * from MyTbl where MyColumn = null"。获得它们的唯一方法是"select * from MyTble where MyColumn is null"

有关详细说明,请参阅http://en.wikipedia.org/wiki/Null_(SQL )

于 2013-01-14T13:53:00.887 回答
0

是的,正如 Tim 所说,NULL 值是未知的。SQL Server 不会为了进行匹配而对 NULL 值做出假设。您可以查看有关 SQL Server 如何处理 NULL 的更多信息。

于 2013-01-14T13:54:24.253 回答