我有一个表,其中有一列值可以是 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 值的行
我认为你的方法很好:
SELECT *
FROM MyTable
WHERE myCol <> 3 OR myCol IS NULL
既然您正在寻求替代方案,那么另一种方法就是制作您的专栏NOT NULL
并将另一个(否则未使用的)值存储在数据库中,而不是NULL
- 例如-1
。然后表达式myCol <> 3
会匹配你的假-NULL
就像任何其他值一样。
SELECT *
FROM MyTable
WHERE myCol <> 3
但总的来说我会推荐not使用这种方法。你已经这样做的方式就是正确的方式。
另外可能值得一提的是其他几个数据库支持IS DISTINCT FROM
这正是你想要的:
SELECT *
FROM MyTable
WHERE myCol IS DISTINCT FROM 3
MySQL 有NULL 安全等于 http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_equal-to也可以用于此目的:
SELECT *
FROM MyTable
WHERE NOT myCol <=> 3
不幸的是,SQL Server 尚不支持这两种语法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)