MySQL 쿼리의 EXCEPT 구문 오류
쿼리 "SELECT s.sno FROM Students s EXCEPT SELECT t.sno FROM take t WHERE t .cno = 'CS112';" 구문 오류로 인해 실패합니다. 이는 MySQL이 EXCEPT 구문을 지원하지 않기 때문입니다.
CS112 강좌를 수강한 학생을 제외하는 원하는 결과를 얻으려면 대체 접근 방식을 사용해야 합니다.
NOT IN 조항
한 가지 옵션은 NOT IN을 사용하는 것입니다. 절:
SELECT s.sno FROM students s WHERE s.sno NOT IN ( SELECT t.sno FROM take t WHERE t.cno = 'CS112' );
이 쿼리는 CS112 과정의 테이크 테이블에서 sno를 검색하는 하위 쿼리에 없는 모든 학생 sno를 선택합니다.
LEFT JOIN
또 다른 방법은 LEFT를 사용하는 것입니다. JOIN:
SELECT s.sno FROM students s LEFT JOIN take t ON s.sno = t.sno WHERE IFNULL(t.cno, '') != 'CS112'
이 쿼리는 Left 조인을 사용하여 학생을 병합하고 테이블을 가져옵니다. IFNULL() 함수는 cno 컬럼의 null 값을 처리하는데 사용되며, 해당 강좌를 수강한 학생을 제외하고 cno 값이 'CS112'와 같지 않은지 확인하는 조건입니다.
사용 예
제공된 예에서 LEFT JOIN 접근 방식은 모의를 사용하여 시연됩니다. 데이터 세트:
create temporary table temp_students (sno int) insert into temp_students values (1) insert into temp_students values (2) insert into temp_students values (3) insert into temp_students values (4) insert into temp_students values (5) insert into temp_students values (6) insert into temp_students values (7) insert into temp_students values (8) insert into temp_students values (9) insert into temp_students values (10) create temporary table temp_take (sno int, cno varchar(50)) insert into temp_take values (1, 'CS112') insert into temp_take values (2, 'CS112') insert into temp_take values (3, 'CS112') insert into temp_take values (4, 'CS112') SELECT s.sno FROM temp_students s LEFT JOIN temp_take t ON s.sno = t.sno WHERE IFNULL(t.cno, '') != 'CS112'
이 쿼리는 CS112 과정을 수강한 학생을 제외하고 sno의 5~10을 반환합니다.
위 내용은 EXCEPT 절을 사용하지 않고 MySQL에서 EXCEPT 기능을 달성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!