>데이터 베이스 >MySQL 튜토리얼 >빈 하위 쿼리로 인해 MySQL의 'NOT IN'이 실패하는 이유는 무엇입니까?

빈 하위 쿼리로 인해 MySQL의 'NOT IN'이 실패하는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-29 15:48:12736검색

Why Does MySQL's `NOT IN` Fail with Empty Subqueries?

세 테이블에 대한 MySQL "NOT IN" 쿼리

쿼리에는 Grade.ID_Courses NOT IN 조건( 평가 WHERE NAME='JOHN' 및 연도=1)에서 ID_Courses를 선택하여 성적에서 행을 필터링합니다. NAME 및 Year 값이 동일한 평가 테이블에 존재하지 않는 테이블입니다. 그러나 평가 테이블에 "JOHN"이라는 이름이 없으면 쿼리는 출력을 생성하지 않습니다.

Why NOT IN Can Be Troublesome

한 가지 제한 사항 하위 쿼리와 함께 NOT IN을 사용하면 하위 쿼리 중 하나에 NULL 값이 포함되어 있을 때 불일치가 발생할 수 있습니다. 이는 SQL이 NULL이 알 수 없거나 누락된 값을 나타내는 세 값 논리를 사용하기 때문입니다. NULL 값을 포함할 수 있는 하위 쿼리에 NOT IN을 적용하면 결과를 예측할 수 없거나 정확하지 않을 수 있습니다.

NOT IN

이러한 문제를 완화하려면 , NULL 값을 포함할 수 있는 하위 쿼리에는 NOT IN을 사용하지 않는 것이 좋습니다. 대신 NOT EXISTS 또는 명시적 조인과 같은 보다 안정적인 대안을 사용할 수 있습니다.

예를 들어 다음과 같이 NOT EXISTS 연산자를 사용하여 쿼리를 다시 작성할 수 있습니다.

SELECT Grade.ID_Courses,
       Course.ID_Courses,
       Grade.NAME,
       Course.NAME,
       Grade.ID_Courses,
       Evaluation.NAME,
       Evaluation.Year,
       Grade.Year
FROM Grade
JOIN Course ON Grade.ID_Courses = Course.ID_Courses
LEFT JOIN Evaluation ON Grade.NAME = Evaluation.NAME and Grade.Year = Evaluation.Year
WHERE Grade.NAME = 'JOHN'
  AND Grade.Year = 1
  AND Evaluation.NAME IS NULL;

명시적 조인 사용 제공된 솔루션에서 제안된 대로 WHERE 절 대신 쿼리의 성능과 가독성을 향상시킬 수도 있습니다.

위 내용은 빈 하위 쿼리로 인해 MySQL의 'NOT IN'이 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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