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

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

Patricia Arquette
发布: 2024-10-24 05:45:02
原创
770 人浏览过

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

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板