加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – SQL Server将不等于<>的行返回值和NULL

发布时间:2020-12-12 16:20:50 所属栏目:MsSql教程 来源:网络整理
导读:我有一个表的列可以是rowTypeID =(1,2,3或null)的值列.我想编写一个返回任何没有值为3的行的查询.在这个例子中,我想要所有的NULL行以及所有的1,2行,我只是不希望值为3的行 当前为数据库设置ANSI空值ON. 我很好奇为什么我不能写 select * from myTable where m
我有一个表的列可以是rowTypeID =(1,2,3或null)的值列.我想编写一个返回任何没有值为3的行的查询.在这个例子中,我想要所有的NULL行以及所有的1,2行,我只是不希望值为3的行

当前为数据库设置ANSI空值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的值

解决方法

我认为你的做法很好:
SELECT *
FROM MyTable
WHERE myCol <> 3 OR myCol IS NULL

由于您要求替代方案,所以执行此操作的另一种方法是使列不为NULL,并在数据库中存储另一个(otherwised未使用的)值,而不是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不支持这些语法之一.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读