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不支持这些语法之一. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |