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
Libérer: 2025-01-22 18:41:09
original
846 Les gens l'ont consulté

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>
Copier après la connexion

CallTableau :

<code>Call
+----+------+--------------+
| id | date | phone_number |
+----+------+--------------+
| 1  | 0945 | 111111111111 |
+----+------+--------------+
| 2  | 0950 | 222222222222 |
+----+------+--------------+
| 3  | 1045 | 333333333333 |
+----+------+--------------+</code>
Copier après la connexion

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.

SELECT *
FROM Call
WHERE phone_number NOT IN (SELECT phone_number FROM Phone_book);
Copier après la connexion

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.

SELECT *
FROM Call
WHERE NOT EXISTS (
    SELECT *
    FROM Phone_book
    WHERE Phone_book.phone_number = Call.phone_number
);
Copier après la connexion

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.

SELECT *
FROM Call
LEFT OUTER JOIN Phone_book
ON (Call.phone_number = Phone_book.phone_number)
WHERE Phone_book.phone_number IS NULL;
Copier après la connexion

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 de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal