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' );
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'
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'
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!