>데이터 베이스 >MySQL 튜토리얼 >MySQL이 EXCEPT를 지원하지 않는 이유는 무엇이며 어떻게 동일한 결과를 얻을 수 있습니까?

MySQL이 EXCEPT를 지원하지 않는 이유는 무엇이며 어떻게 동일한 결과를 얻을 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-03 19:06:09864검색

Why Doesn't MySQL Support EXCEPT and How Can I Achieve the Same Result?

MySQL 쿼리의 EXCEPT 구문 오류

MySQL 사용자가 쿼리에 EXCEPT 연산자를 사용하려고 하면 구문 오류가 발생할 수 있습니다. 이 오류는 하위 쿼리의 조건과 일치하는 기본 테이블의 행을 제외하려고 할 때 자주 발생합니다.

다음 예를 고려하세요.

SELECT s.sno
FROM students s
EXCEPT
SELECT t.sno
FROM take t
WHERE t.cno = 'CS112';

이 쿼리는 기본 테이블에서 모든 학생 ID를 검색하려고 시도합니다. "CS112" 과정의 "take" 테이블에 없는 "students" 테이블. 그러나 MySQL은 EXCEPT 구문을 지원하지 않습니다.

대체 솔루션:

원하는 결과를 얻으려면 두 가지 대체 접근 방식이 있습니다.

  1. 안됨 하위 쿼리:
SELECT s.sno
FROM students s
WHERE s.sno NOT IN
(
    SELECT t.sno
    FROM take t
    WHERE t.cno = 'CS112'
);

이 쿼리는 "students" 테이블의 학생 ID가 "CS112" 과정의 "take" 테이블에 없는지 명시적으로 확인합니다.

  1. NULL을 사용한 왼쪽 조인 확인:
SELECT s.sno
FROM students s
LEFT JOIN take t ON s.sno = t.sno
WHERE IFNULL(t.cno, '') != 'CS112';

이 쿼리는 LEFT JOIN을 사용하여 "students" 테이블과 "take" 테이블 간의 학생 ID를 일치시킵니다. 그런 다음 IFNULL 함수를 사용하여 "take" 테이블의 "cno" 필드가 null인지 확인하여 "CS112"에 등록되지 않은 학생을 나타냅니다.

사용 예:

질문의 모형 데이터를 사용하여 NULL 검사를 통한 LEFT JOIN은 다음을 생성합니다. 결과:

SELECT s.sno
FROM temp_students s
LEFT JOIN temp_take t ON s.sno = t.sno
WHERE IFNULL(t.cno, '') != 'CS112';

출력:

5
6
7
8
9
10

따라서 사용자는 EXCEPT 구문을 사용하는 대신 NOT IN 하위 쿼리 또는 NULL 검사 전략과 함께 LEFT JOIN을 사용하여 MySQL에서 행을 제외할 수 있습니다. 쿼리합니다.

위 내용은 MySQL이 EXCEPT를 지원하지 않는 이유는 무엇이며 어떻게 동일한 결과를 얻을 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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