使用此特定筛选器时,可能导致 T-SQL 查询输出不连贯的原因



我正在使用SSMS,我有以下T-SQL查询:

USE MyDatabase
SELECT
...
FROM VIEW1
WHERE [ArrivalDate] BETWEEN '2015-01-01' AND '2018-11-30'
AND ([Reason For Stay] = 'SINGL' AND [Total Guest] = 2 AND [Sum of Child] = 0)
AND [Booking type] = 'FIT'

上述查询输出 250 条记录。

在查询末尾添加以下筛选器会输出 30 条记录:

AND [Title] = 'MR&MRS'

当我将上面的过滤器更改为:

AND [Title] <> 'MR&MRS'

我期望获得 220 条记录(这很明显),但查询输出 188 条记录!

SSMS 的"消息"选项卡下,我得到以下内容:

警告:空值被聚合或其他 SET 操作消除。

这里可能发生了什么?如何更正 T-SQL 查询以获取 220 条记录?

您需要处理NULLs

USE MyDatabase
SELECT
...
FROM VIEW1
WHERE [ArrivalDate] BETWEEN '2015-01-01' AND '2018-11-30'
AND ([Reason For Stay] = 'SINGL' AND [Total Guest] = 2 AND [Sum of Child] = 0)
AND [Booking type] = 'FIT'
AND ([Title] <> 'MR&MRS' OR [Title] IS NULL)
                             -- here

相关:SQL 的三值逻辑

这是

意料之中的,因为与null值相比,特殊行为:

任何与null值的比较都会评估为unknown,这会从结果中排除记录。

您可以在此处了解更多信息:SQL中的三个有价值的逻辑。在那里你可以读到:

没有什么等于空。甚至不等于空

最新更新