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 오류 값이 있는 행도 검색하려면 다음과 같은 몇 가지 접근 방식이 있습니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!