數據如下:爲什麼比較NOT(x = 0)和NOT(x = NULL)返回相同的值?
ItemID PrivateSales PublicSales TotalSales SalesPerson
----------- ----------------------- ----------------------- ---------------------------- -----------------------------
1 300 400 700 12
1 NULL 10 10 12
2 NULL NULL NULL NULL
3 NULL NULL NULL NULL
6 20 900 920 11
8 22 18 40 10
9 20 980 1000 11
22 NULL NULL NULL NULL
11 NULL NULL NULL NULL
15 40 NULL 40 77
16 12 NULL 12 NULL
44 NULL 44 44 23
當我運行以下兩個不同的查詢,我得到同樣的結果:
SELECT TOP 1000 [ItemID]
,[PrivateSales]
,[PublicSales]
,[TotalSales]
,[SalesPerson]
FROM [Sales]
WHERE NOT (
PrivateSales IS NULL
AND PublicSales IS NULL
AND TotalSales IS NULL
)
AND:
考慮NULL
列爲什麼WHERE NOT (x = 0)
不返回NULL
列? * Sales列是十進制類型,如果重要的話。
**'NULL' '','=,=,<, >'總是NULL。句點。**'NOT(x = 0)'與'x <> 0'相同,所以當x爲NULL時,它不會被返回。與NULL比較使用'IS NULL/IS NOT NULL' – lad2025
至少在SQLAny在哪裏(和我猜ASE)有一個選項叫做ansinull,它正在改變compat。原因。我不知道MS SQL,但也許它與它有關。 (因此將行爲從stadard SQL改爲) – frlan
是的,存在[SET ANSI_NULLS](https://msdn.microsoft.com/en-us/library/ms188048.aspx),但請保留它。 '當SET ANSI_NULLS爲ON時,即使column_name中有空值,使用WHERE column_name = NULL的SELECT語句也會返回零行。' – lad2025