Maison >base de données >tutoriel mysql >Comment trouver des enregistrements dans une table qui n'existent pas dans une autre ?
Comment retrouver des enregistrements dans une table qui n'existent pas dans une autre table ?
Dans une base de données relationnelle, vous devrez peut-être rechercher des enregistrements dans une table qui n'existent pas dans une autre table. Un exemple courant est l'identification des enregistrements d'appels pour des personnes dont les numéros de téléphone ne sont pas enregistrés dans l'annuaire téléphonique.
Considérez le scénario suivant :
<code>电话簿 (Phone_book) +----+------+--------------+ | id | name | phone_number | +----+------+--------------+ | 1 | John | 111111111111 | +----+------+--------------+ | 2 | Jane | 222222222222 | +----+------+--------------+ 来电记录 (Call) +----+------+--------------+ | id | date | phone_number | +----+------+--------------+ | 1 | 0945 | 111111111111 | +----+------+--------------+ | 2 | 0950 | 222222222222 | +----+------+--------------+ | 3 | 1045 | 333333333333 | +----+------+--------------+</code>
Pour retrouver les enregistrements d'appels d'une personne dont le numéro de téléphone ne figure pas dans l'annuaire téléphonique, vous pouvez utiliser plusieurs méthodes :
Méthode 1 : Utiliser la sous-requête 'NOT IN'
<code class="language-sql">SELECT * FROM Call WHERE phone_number NOT IN (SELECT phone_number FROM Phone_book)</code>
Cette requête vérifie directement si le numéro de téléphone de la table 'Appel' apparaît dans la table 'Phone_book'. Sinon, sélectionnez l'enregistrement d'appel correspondant.
Méthode 2 : Utiliser la sous-requête 'NOT EXISTS'
<code class="language-sql">SELECT * FROM Call WHERE NOT EXISTS (SELECT * FROM Phone_book WHERE Phone_book.phone_number = Call.phone_number)</code>
Semblable à la sous-requête 'NOT IN', cette méthode utilise la sous-requête 'NOT EXISTS' pour vérifier si un numéro de téléphone correspondant existe dans la table 'Phone_book'.
Méthode 3 : Utilisez 'LEFT OUTER JOIN'
<code class="language-sql">SELECT * FROM Call LEFT OUTER JOIN Phone_Book ON (Call.phone_number = Phone_book.phone_number) WHERE Phone_book.phone_number IS NULL</code>
Cette méthode utilise 'LEFT OUTER JOIN' pour récupérer tous les enregistrements d'appels entrants, puis filtre les enregistrements avec des numéros de téléphone correspondants dans la table 'Phone_book' en vérifiant les valeurs NULL dans la colonne 'Phone_book.phone_number'.
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!