Maison > base de données > tutoriel mysql > Pourquoi MySQL ne prend-il pas en charge SAUF et comment puis-je obtenir le même résultat ?

Pourquoi MySQL ne prend-il pas en charge SAUF et comment puis-je obtenir le même résultat ?

Mary-Kate Olsen
Libérer: 2025-01-03 19:06:09
original
868 Les gens l'ont consulté

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

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

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 :

  1. NOT IN Sous-requête :
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 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".

  1. LEFT JOIN avec NULL Vérifiez :
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 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';
Copier après la connexion

Sortie :

5
6
7
8
9
10
Copier après la connexion

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!

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