admin

SQL Server 返回不等于 <> 值和 NULL 的行

sql

我有一个表,其中有一列值可以是 rowTypeID = (1,2,3, or null)。我想编写一个查询,该查询返回其中没有值为 3 的任何行。在这个例子中,我想要所有 NULL 行以及所有 1,2 行我只是不想要值为 3 的行

Set ANSI null 当前为数据库设置了 ON。

我很好奇为什么我不能写

select * from myTable where myCol <> 3

此查询不会返回 myCol 列中具有 NULL 的任何行

我必须写

select * from my Table where myCol <> 3 or myCol Is NULL 

我是否总是必须包含 IS NULL 或者我可以设置它以便 where 子句 myCol <>3 将返回具有 Null 作为我的 Col 值的行


阅读 231

收藏
2021-06-07

共1个答案

admin

我认为你的方法很好:

SELECT *
FROM MyTable
WHERE myCol <> 3 OR myCol IS NULL

由于您要求替代方案,另一种方法是制作您的列NOT NULL并在数据库中存储另一个(否则未使用的)值而不是NULL-例如-1. 然后表达式myCol <> 3将匹配你的假 -NULL就像它与任何其他值一样。

SELECT *
FROM MyTable
WHERE myCol <> 3

但是总的来说,我建议不要使用这种方法。你已经在做的方式是正确的方式。

另外值得一提的是,其他几个数据库支持IS DISTINCT FROM完全符合您的要求:

SELECT *
FROM MyTable
WHERE myCol IS DISTINCT FROM 3

MySQL 具有NULL-safe equal也可用于此目的:

SELECT *
FROM MyTable
WHERE NOT myCol <=> 3

不幸的是,SQL Server 尚不支持这两种语法中的任何一种。

2021-06-07