Maison >base de données >tutoriel mysql >Comment rechercher des appels provenant de numéros non répertoriés dans une base de données d'annuaire téléphonique ?

Comment rechercher des appels provenant de numéros non répertoriés dans une base de données d'annuaire téléphonique ?

DDD
DDDoriginal
2025-01-22 18:41:09801parcourir

How to Find Calls from Numbers Not Listed in a Phone Book Database?

Identifier les appelants non répertoriés dans MySQL

Cet article présente plusieurs techniques MySQL pour identifier les appels téléphoniques provenant de numéros non répertoriés dans une base de données d'annuaire téléphonique. Nous analyserons le problème à l'aide d'échantillons de données et fournirons des solutions efficaces.

Scénario :

Nous avons deux tables : Phone_book et Call.

Phone_bookTableau :

<code>Phone_book
+----+------+--------------+
| id | name | phone_number |
+----+------+--------------+
| 1  | John | 111111111111 |
+----+------+--------------+
| 2  | Jane | 222222222222 |
+----+------+--------------+</code>

CallTableau :

<code>Call
+----+------+--------------+
| id | date | phone_number |
+----+------+--------------+
| 1  | 0945 | 111111111111 |
+----+------+--------------+
| 2  | 0950 | 222222222222 |
+----+------+--------------+
| 3  | 1045 | 333333333333 |
+----+------+--------------+</code>

Objectif : Rechercher des appels provenant de numéros de téléphone pas dans le tableau Phone_book.

Approches de solutions :

Voici trois méthodes efficaces pour y parvenir :

1. NOT INClause :

Cette approche exclut directement les numéros de téléphone de la table Call qui sont présents dans la table Phone_book. C'est efficace pour les Phone_book tables plus petites.

<code class="language-sql">SELECT *
FROM Call
WHERE phone_number NOT IN (SELECT phone_number FROM Phone_book);</code>

2. NOT EXISTS Sous-requête :

Ceci utilise une sous-requête pour vérifier l'existence d'un numéro de téléphone dans Phone_book. C'est généralement plus efficace que NOT IN pour les tables Phone_book plus grandes.

<code class="language-sql">SELECT *
FROM Call
WHERE NOT EXISTS (
    SELECT *
    FROM Phone_book
    WHERE Phone_book.phone_number = Call.phone_number
);</code>

3. LEFT OUTER JOIN :

Cette méthode utilise un LEFT OUTER JOIN pour comparer les numéros de téléphone. La requête renvoie tous les appels, mais seuls ceux avec des valeurs NULL dans les colonnes Phone_book représentent des numéros non répertoriés.

<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>

Choisir la meilleure solution :

L'approche optimale dépend de la taille et de la structure de votre base de données. Pour les grands ensembles de données, la sous-requête NOT EXISTS ou LEFT OUTER JOIN sont généralement préférées pour de meilleures performances. Pour les ensembles de données plus petits, la clause NOT IN peut suffire. Pensez à utiliser EXPLAIN pour analyser les plans d'exécution des requêtes et choisir la méthode la plus efficace.

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!

Déclaration:
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