Maison >base de données >tutoriel mysql >Comment récupérer efficacement les enregistrements d'employés manquants à l'aide de SQL ?
Récupération des données manquantes à l'aide de "SELECT * WHERE NOT EXISTS"
L'utilisateur a l'intention d'extraire tous les enregistrements de la table "employés" lorsque cela est spécifique les cellules n'existent pas dans la table "eotm_dyn". Pour y parvenir, l'utilisateur utilise la requête suivante :
SELECT * from employees WHERE NOT EXISTS (SELECT name FROM eotm_dyn)
Cependant, cette requête ne donne systématiquement aucun résultat, même s'il sait qu'il manque environ 20 noms.
Comprendre le problème
Comprendre le problème
L'erreur réside dans l'échec de la jointure des deux tables dans la requête. En l'état, la requête évalue simplement l'existence de noms dans la table « eotm_dyn » sans référencer la table « employés ». Cela renverra toujours false sauf si la table "eotm_dyn" est vide.
Solution : joindre les tables
SELECT * FROM employees e WHERE NOT EXISTS ( SELECT null FROM eotm_dyn d WHERE d.employeeID = e.id )
Pour joindre les tables et filtrer les noms manquants, modifiez le requête comme suit :
Dans cette requête modifiée, un LEFT JOIN est implicitement effectué entre les "employés" et Tables "eotm_dyn" basées sur le champ commun "employeeID". La clause WHERE utilise ensuite NOT EXISTS pour filtrer tous les enregistrements d'employés dont les noms (ou EmployeeID) n'existent pas dans la table "eotm_dyn".
Approche alternative : LEFT JOIN et filtrage des valeurs NULL
SELECT * FROM employees e LEFT JOIN eotm_dyn d ON e.employeeID = d.employeeID WHERE d.name IS NULL
Alternativement, on pourrait utiliser un LEFT JOIN et filtrer les valeurs NULL comme suit :
Cette approche est peut-être moins efficace que l'utilisation de NOT EXISTS, mais elle offre une méthode simple pour récupérer les données manquantes.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!