


Comment interroger efficacement plusieurs tables MySQL pour rechercher des écarts lors de la gestion des valeurs NULL ?
Dec 27, 2024 am 02:34 AMMySQL "NOT IN" Interrogation de plusieurs tables
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.
Comprendre le problème avec "NOT IN"
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.
Solution : éviter "NOT IN"
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 :
- EXPLICIT JOINS : Au lieu d'utiliser la clause WHERE pour joindre des tables, spécifiez explicitement les jointures à l'aide des instructions JOIN. Cela permet d'obtenir des résultats plus précis et prévisibles.
- SOUS-REQUÊTE NON EXISTE : Vérifiez l'existence de lignes dans une table qui n'existent pas dans une autre table à l'aide d'une sous-requête NOT EXISTS imbriquée.
Exemple : Utilisation de NOT EXISTS
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!

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Réduisez l'utilisation de la mémoire MySQL dans Docker

Comment modifier une table dans MySQL en utilisant l'instruction ALTER TABLE?

Comment résoudre le problème de MySQL ne peut pas ouvrir la bibliothèque partagée

Exécutez MySQL dans Linux (avec / sans conteneur Podman avec phpmyadmin)

Exécuter plusieurs versions MySQL sur macOS: un guide étape par étape

Comment sécuriser MySQL contre les vulnérabilités communes (injection SQL, attaques par force brute)?

Comment configurer le cryptage SSL / TLS pour les connexions MySQL?
