首页  >  文章  >  数据库  >  如何在 MySQL 查询中使用 IN 关键字处理 NULL 值?

如何在 MySQL 查询中使用 IN 关键字处理 NULL 值?

Patricia Arquette
Patricia Arquette原创
2024-10-24 05:45:02686浏览

How to Handle NULL Values with IN Keyword in MySQL Queries?

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 值,您可以按如下方式调整查询:

  • COALESCE (Error,'') not in ('Timeout','Connection Error'):在比较 Error 列中的 NULL 值之前,将它们替换为空字符串。
  • Error IS NULL OR Error not in ('Timeout','Connection Error'):这会显式检查 NULL 值和不匹配值。
  • CASE WHEN Error IS NULL THEN 1 ELSE Error not in ('Timeout','Connection Error') THEN 1 END = 1:这使用 CASE 语句将 NULL 和匹配值转换为 1,然后检查是否等于 1。

示例:

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn