Erreur de syntaxe EXCEPT dans les requêtes MySQL
Les utilisateurs MySQL peuvent rencontrer une erreur de syntaxe lorsqu'ils tentent d'utiliser l'opérateur EXCEPT dans leurs requêtes. Cette erreur se produit souvent lorsque vous essayez d'exclure des lignes d'une table principale qui correspondent à une condition dans une sous-requête.
Considérez l'exemple suivant :
SELECT s.sno FROM students s EXCEPT SELECT t.sno FROM take t WHERE t.cno = 'CS112';
Cette requête tente de récupérer tous les identifiants d'étudiant de la table « étudiants » qui ne sont pas présents dans la table « à prendre » du cours « CS112 ». Cependant, MySQL ne prend pas en charge la syntaxe EXCEPT.
Solutions alternatives :
Pour obtenir le résultat souhaité, il existe deux approches alternatives :
SELECT s.sno FROM students s WHERE s.sno NOT IN ( SELECT t.sno FROM take t WHERE t.cno = 'CS112' );
Cette requête vérifie explicitement si les identifiants des étudiants dans la table "étudiants" ne sont pas présents dans la table "prise" pour le cours "CS112".
SELECT s.sno FROM students s LEFT JOIN take t ON s.sno = t.sno WHERE IFNULL(t.cno, '') != 'CS112';
Cette requête utilise un LEFT JOIN pour faire correspondre les identifiants d'étudiant entre les "étudiants" et "prendre" tableaux. Il utilise ensuite la fonction IFNULL pour vérifier si le champ « cno » dans la table « take » est nul, indiquant un étudiant non inscrit en « CS112 ».
Exemple d'utilisation :
En utilisant les données simulées dans la question, la vérification LEFT JOIN avec NULL produit ce qui suit résultat :
SELECT s.sno FROM temp_students s LEFT JOIN temp_take t ON s.sno = t.sno WHERE IFNULL(t.cno, '') != 'CS112';
Sortie :
5 6 7 8 9 10
Par conséquent, au lieu d'utiliser la syntaxe EXCEPT, les utilisateurs peuvent utiliser la sous-requête NOT IN ou LEFT JOIN avec des stratégies de vérification NULL pour exclure des lignes dans MySQL requêtes.
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!