>  기사  >  데이터 베이스  >  MySQL은 IN 표현식에서 NULL 값을 어떻게 처리합니까?

MySQL은 IN 표현식에서 NULL 값을 어떻게 처리합니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-23 18:17:05305검색

How Does MySQL Handle NULL Values in IN Expressions?

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' 및 'Timeout' 또는 'Connection Error'와 같지 않은 오류 값. 놀랍게도 이 쿼리는 오류에 대해 NULL 값이 있는 행을 제외합니다.

MySQL은 IN 표현식에서 NULL 값을 무시하는 이유는 무엇입니까?

MySQL은 NULL을 알 수 없거나 정의되지 않은 값으로 처리합니다. IN 표현식에 사용될 때 MySQL은 NULL을 TRUE도 FALSE도 아닌 것으로 평가하므로 알 수 없는 결과가 발생합니다. 따라서 IN 표현식은 자체적으로 NULL로 평가됩니다.

쿼리 수정

NULL 오류 값이 있는 행도 검색하려면 다음과 같은 몇 가지 접근 방식이 있습니다.

  1. COALESCE를 사용하여 NULL 값을 기본값으로 대체:
select count(*) from Table1 where CurrentDateTime>'2012-05-28 15:34:02.403504' and COALESCE(Error,'') not in ('Timeout','Connection Error');
  1. IS NULL 및 OR을 사용하여 NULL 값을 명시적으로 확인:
select count(*) from Table1 where CurrentDateTime>'2012-05-28 15:34:02.403504' and (Error IS NULL OR Error not in ('Timeout','Connection Error'));
  1. CASE를 사용하여 오류 값을 기반으로 부울 결과를 할당합니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.