MySQL IN 关键字和 NULL 值
MySQL 中的 IN 关键字执行给定表达式和值列表之间的比较,返回布尔结果(TRUE/FALSE)。但是,在某些情况下,MySQL 以不同的方式处理 NULL 值。
考虑以下查询:
select count(*) from Table1 where CurrentDateTime>'2012-05-28 15:34:02.403504' and Error not in ('Timeout','Connection Error');
此查询旨在从 Table1 中检索 CurrentDateTime 值大于的行“2012-05-28 15:34:02.403504”和一个不等于“超时”或“连接错误”的错误值。令人惊讶的是,此查询排除了带有 NULL 值的错误行。
为什么 MySQL 会忽略 IN 表达式中的 NULL 值?
MySQL 将 NULL 视为未知或未定义的值。当在 IN 表达式中使用时,MySQL 将 NULL 计算为既不是 TRUE 也不是 FALSE,从而导致未知结果。因此,IN 表达式本身的计算结果为 NULL。
修复查询
要检索具有 NULL 错误值的行,有多种方法:
select count(*) from Table1 where CurrentDateTime>'2012-05-28 15:34:02.403504' and COALESCE(Error,'') not in ('Timeout','Connection Error');
select count(*) from Table1 where CurrentDateTime>'2012-05-28 15:34:02.403504' and (Error IS NULL OR Error not in ('Timeout','Connection Error'));
select count(*) from Table1 where CurrentDateTime>'2012-05-28 15:34:02.403504' and CASE WHEN Error IS NULL THEN 1 ELSE Error not in ('Timeout','Connection Error') THEN 1 ELSE 0 END = 1;
这些修改确保具有 NULL 错误值的行包含在查询结果中。
以上是MySQL 如何处理 IN 表达式中的 NULL 值?的详细内容。更多信息请关注PHP中文网其他相关文章!