当我使用
时Select Distinct Brand_ID
from db.ABC
WHERE
Brand_ID <> 800
我得到了返回的输出:
+----------+
| Brand_ID |
+----------+
| 100 |
| 200 |
| 300 |
| 400 |
| 500 |
| 600 |
| 700 |
| 900 |
+----------+
但是,该列确实包含NULL值,它们存在。 我需要更新我的select语句以明确说:
Select Distinct Brand_ID
from db.ABC
WHERE
Brand_ID <> 800 OR Brand_ID IS NULL
要获得正确的输出:
+----------+
| Brand_ID |
+----------+
| NULL |
| 100 |
| 200 |
| 300 |
| 400 |
| 500 |
| 600 |
| 700 |
| 900 |
+----------+
为什么在未明确说明时会删除NULL
值?
答案 0 :(得分:5)
SQL NULL
表示
我不知道
所以NULL
不是值。
答案 1 :(得分:1)
为什么没有明确说明时会删除NULL值?
因为NULL <> 800
作为未知数量,NULL可能等于800或者可能不是。唯一知道的是它IS NULL
。 NULL的任何相等或不相等测试将始终返回false。
编辑:这是一个奇怪的闪存实现...... NULL是Schroedinger的SQL Universe的猫。 :)
答案 2 :(得分:1)
SQL NULL比较的工作原理。在where子句中消除了NULL。 这也是因为SET ANSI_NULL ON设置。 默认情况下它是ON。
在此处查看 excellent explanation
您可以通过陈述
来尝试查询SET ANSI_NULL OFF
GO
Select Distinct Brand_ID
from db.ABC
WHERE
Brand_ID <> 800
这将提供正确的输出