MYSQL IN 키워드의 NULL 값 처리
SQL 쿼리는 IN 키워드를 활용하여 지정된 값 집합을 기반으로 결과를 필터링하는 경우가 많습니다. 그러나 NULL 값을 처리할 때 MYSQL의 IN 키워드는 고려해야 할 고유한 동작을 나타냅니다.
문제: NULL 값을 제외하는 IN 키워드
다음 쿼리를 고려하세요.
select count(*) from Table1 where CurrentDateTime>='2012-05-28 15:34:02.403504' and Error not in ('Timeout','Connection Error');
이 쿼리는 Error 값이 'Timeout' 또는 'Connection Error'인 행을 제외하려고 했으나 Error가 NULL인 행을 예기치 않게 생략했습니다. NULL 값을 설명하려면 추가 조건(또는 오류가 NULL임)을 추가해야 합니다.
NULL 제외 이유
IN 키워드는 부울 값을 사용하여 표현식을 비교합니다( 1/0). 그러나 경우에 따라 부울 값 대신 NULL을 반환할 수도 있습니다. Error가 NULL인 경우 IN 표현식은 다음과 같습니다.
Error <> 'Timeout' AND Error <> 'Connection Error'
여기에는 Null 비교 규칙이 적용됩니다. Error의 값이 NULL이므로 표현식은 true 또는 false로 평가될 수 없습니다.
NULL 값을 포함하는 솔루션
NULL 값이 있는 행을 포함하려면 다음을 수행하세요. 다음 해결 방법을 사용하세요.
IN이 포함된 COALESCE:
COALESCE(Error,'') not in ('Timeout','Connection Error');
IS NULL이 포함된 OR 조건 :
Error IS NULL OR Error not in ('Timeout','Connection Error');
단락을 사용한 CASE 표현식:
CASE WHEN Error IS NULL THEN 1 ELSE Error not in ('Timeout','Connection Error') THEN 1 END = 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');
NOT IN 표현식이 NULL로 평가되므로 'hi'만 반환합니다. NULL 메시지 값이 있는 행에 대해.
결론
MYSQL의 IN 키워드는 비교 중에 NULL 값을 특수한 경우로 처리합니다. IN을 사용하는 개발자는 이 동작을 인식하고 NULL 값이 있는 행을 제외하거나 잘못 해석하지 않도록 적절한 처리를 구현해야 합니다.
위 내용은 MYSQL\의 IN 키워드는 비교 시 NULL 값을 어떻게 처리합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!