Maison >base de données >tutoriel mysql >Comment interroger efficacement plusieurs tables MySQL pour rechercher des écarts lors de la gestion des valeurs NULL ?
La requête MySQL donnée cherche à identifier les écarts entre les données des tables de note et d'évaluation en excluant les lignes de note qui sont présentes en Évaluation. Cependant, la requête d'origine ne parvient à récupérer aucun résultat lorsque le nom spécifié ("JOHN") n'est pas trouvé dans l'évaluation.
Le "NOT IN" L'opérateur, tel qu'utilisé dans la requête d'origine, est problématique si une colonne impliquée peut contenir des valeurs NULL. Dans MySQL, NULL représente une valeur inconnue ou manquante, et son interaction avec certains opérateurs peut conduire à des résultats inattendus.
Pour résoudre ce problème, il est recommandé de évitez d'utiliser "NOT IN" lorsque vous traitez des colonnes pouvant contenir des valeurs NULL. Envisagez plutôt d'utiliser des approches alternatives :
La requête modifiée suivante utilise NOT EXISTS pour obtenir les résultats souhaités :
SELECT G.ID_Courses, C.ID_Courses, G.NAME, C.NAME, G.ID_Courses, E.NAME, E.Year, G.Year FROM Grade AS G INNER JOIN Course AS C ON G.ID_Courses = C.ID_Courses LEFT JOIN Evaluation AS E ON G.NAME = E.NAME AND G.Year = E.Year WHERE NOT EXISTS( SELECT 1 FROM Evaluation WHERE NAME = G.NAME AND Year = G.Year ) AND G.NAME = 'JOHN' AND G.Year = 1 GROUP BY G.ID_Courses;
En utilisant NOT EXISTS, cette requête garantit que les lignes de Grade qui n'ont pas de lignes correspondantes dans Évaluation seront toujours incluses dans la sortie.
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!