집 >데이터 베이스 >MySQL 튜토리얼 >빈 하위 쿼리로 인해 MySQL의 'NOT IN'이 실패하는 이유는 무엇입니까?
쿼리에는 Grade.ID_Courses NOT IN 조건( 평가 WHERE NAME='JOHN' 및 연도=1)에서 ID_Courses를 선택하여 성적에서 행을 필터링합니다. NAME 및 Year 값이 동일한 평가 테이블에 존재하지 않는 테이블입니다. 그러나 평가 테이블에 "JOHN"이라는 이름이 없으면 쿼리는 출력을 생성하지 않습니다.
한 가지 제한 사항 하위 쿼리와 함께 NOT IN을 사용하면 하위 쿼리 중 하나에 NULL 값이 포함되어 있을 때 불일치가 발생할 수 있습니다. 이는 SQL이 NULL이 알 수 없거나 누락된 값을 나타내는 세 값 논리를 사용하기 때문입니다. NULL 값을 포함할 수 있는 하위 쿼리에 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!