簡體   English   中英

使用此特定過濾器時,可能是什么導致我的T-SQL查詢輸出不一致?

[英]What might be causing an incoherent output from my T-SQL query when using this specific filter?

我正在使用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中的三值邏輯 在那里您可以閱讀:

沒有什么等於空。 甚至沒有null等於null

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM