Maison > base de données > tutoriel mysql > Comment obtenir la fonctionnalité EXCEPT dans MySQL sans utiliser la clause EXCEPT ?

Comment obtenir la fonctionnalité EXCEPT dans MySQL sans utiliser la clause EXCEPT ?

Barbara Streisand
Libérer: 2024-12-31 13:26:14
original
223 Les gens l'ont consulté

How to Achieve EXCEPT Functionality in MySQL Without Using the EXCEPT Clause?

EXCEPT Erreur de syntaxe dans la requête MySQL

La requête "SELECT s.sno FROM student s EXCEPT SELECT t.sno FROM take t WHERE t .cno = 'CS112';" échoue avec une erreur de syntaxe. En effet, MySQL ne prend pas en charge la syntaxe EXCEPT.

Pour obtenir les résultats souhaités en matière d'exclusion des étudiants ayant suivi le cours CS112, une approche alternative doit être utilisée.

Clause NOT IN

Une option consiste à utiliser la clause NOT IN :

SELECT s.sno 
FROM students s    
WHERE s.sno NOT IN 
(
    SELECT t.sno 
    FROM take t 
    WHERE t.cno = 'CS112'
);
Copier après la connexion

Cette requête sélectionne tous les étudiants les sno qui ne sont pas trouvés dans la sous-requête, qui récupère les sno de la table de prise du cours CS112.

LEFT JOIN

Une autre méthode consiste à utiliser un LEFT JOIN :

SELECT s.sno 
FROM students s    
    LEFT JOIN take t ON s.sno = t.sno
WHERE IFNULL(t.cno, '') != 'CS112'
Copier après la connexion

Cette requête utilise une jointure gauche pour fusionner les étudiants et prendre des tables. La fonction IFNULL() est utilisée pour gérer les valeurs nulles dans la colonne cno, et la condition vérifie si la valeur cno n'est pas égale à « CS112 », à l'exclusion des étudiants qui ont suivi le cours.

Exemple d'utilisation

Dans l'exemple fourni, l'approche LEFT JOIN est démontrée à l'aide d'une simulation ensemble de données :

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'
Copier après la connexion

Cette requête renvoie les sno de 5 à 10, à l'exclusion des étudiants qui ont suivi le cours CS112.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal