Tru*_*i J 2 sql t-sql sql-server
我想在TABLEA的COLUMNA中检索除1,2,3,4,5以外的值的所有行。
SELECT * FROM TABLEA WHERE COLUMNA NOT IN (1,2,3,4,5)
Run Code Online (Sandbox Code Playgroud)
但这也消除了COLUMNA中具有NULL值的行。
我不想消除NULL值行,并希望将这些行包括在结果集中。
另外,我可以尝试下面的查询相同
SELECT * FROM TABLEA WHERE COLUMNA NOT IN (1,2,3,4,5) OR COLUMNA IS NULL.
Run Code Online (Sandbox Code Playgroud)
但是我想知道,为什么必须添加此OR条件?
为什么需要额外的?
NULL比较几乎总是导致NULL,而不是true或false。一个WHERE子句过滤掉所有非真正价值,所以他们得到过滤掉。
这就是SQL定义的方式NULL。为什么这样NULL定义?
NULL在SQL中并不意味着“丢失”。意思是“未知”。因此,结果<unknown> not in (1, 2, 3, 4, 5)为“未知”,因为该值可能为1或可能为0。因此将对其进行过滤。
我也注意到,SQL标准包括NULL-safe比较,IS NOT DISTINCT FROM以及IS DISTINCT FROM对应于=和<>分别。这些NULL只是“任何其他值”,因此两个NULL值被视为相等。但是,据我所知,没有用于NULL-safe IN和的构造NOT IN。
| 归档时间: |
|
| 查看次数: |
42 次 |
| 最近记录: |