MySQL IN 关键字排除 NULL 值
在 MySQL 查询中使用 IN 关键字根据特定值过滤行时,可能会出现意外结果使用 NULL 值时会发生这种情况。本文调查了这种行为背后的原因,并提供了在这种情况下正确处理 NULL 值的方法。
您提到的查询:
select count(*) from Table1 where CurrentDateTime>'2012-05-28 15:34:02.403504' and Error not in ('Timeout','Connection Error');
令人惊讶的是排除了 Error 列包含 NULL 值的行。这是因为 IN 关键字在语义上等同于:
Error <> 'TimeOut' AND Error <> 'Connection Error'
由于 NULL 值的属性,上述表达式无法计算为 true。 NULL 值不等于任何其他值,包括它们本身。因此,Error 列中包含 NULL 值的行将被过滤掉。
要在结果集中包含 NULL 值,您可以按如下方式调整查询:
示例:
create table tbl (msg varchar(100) null, description varchar(100) not null); insert into tbl values ('hi', 'greet'), (null, 'nothing'); select 'hulk' as x, msg, description from tbl where msg not in ('bruce','banner');
此查询将仅返回 msg 为“hi”的行,因为 NULL 值因其不确定性而被排除。
以上是如何在 MySQL 查询中使用 IN 关键字处理 NULL 值?的详细内容。更多信息请关注PHP中文网其他相关文章!