这是关于我在 Microsoft Sql Server 中发现的奇怪行为。如果我错了,请纠正我。
SELECT COUNT(*) FROM TABLEA
WHERE [Column1] IS NULL;
这将返回 30018 行。
CREATE VIEW VIEWB AS
SELECT * FROM TABLEA AS t1
WHERE t1.[Column1] NOT IN ('Cross/Up sell', 'Renegotiation', 'Renewal')
如果我检查VIEWB
,我在Column1
中找不到NULL
:
SELECT COUNT(*) FROM VIEWB
WHERE [Column1] IS NULL;
这将返回 0 行。
为什么?上面的查询排除了 3 个值,但它不应该排除 NULL。为什么Ms Sql Server 会这样?我应该预料到会这样吗? 我该如何修复它?最佳答案
这实际上是 SQL Server 将 NULL 视为值时犯的一个常见错误。默认情况下,它被视为未知,如文档 here 所示。 。因此,在您看来,您还需要包含 OR t1.[Column1] IS NULL
。
您可以通过调用SET ANSI_NULLS OFF
来更改此行为。但是,不建议使用此功能,因为正如@Martin Smith 指出的那样,该功能已被弃用。
但是,这不是 SQL Server 特定的问题。它是 ANSI SQL standard 的一部分.
关于sql - 排除 NULL 值。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11491831/