In diesem Artikel werden verschiedene MySQL-Techniken zur Identifizierung von Telefonanrufen von Nummern demonstriert, die nicht in einer Telefonbuchdatenbank aufgeführt sind. Wir analysieren das Problem anhand von Beispieldaten und bieten effiziente Lösungen.
Szenario:
Wir haben zwei Tabellen: Phone_book
und Call
.
Phone_book
Tabelle:
<code>Phone_book +----+------+--------------+ | id | name | phone_number | +----+------+--------------+ | 1 | John | 111111111111 | +----+------+--------------+ | 2 | Jane | 222222222222 | +----+------+--------------+</code>
Call
Tabelle:
<code>Call +----+------+--------------+ | id | date | phone_number | +----+------+--------------+ | 1 | 0945 | 111111111111 | +----+------+--------------+ | 2 | 0950 | 222222222222 | +----+------+--------------+ | 3 | 1045 | 333333333333 | +----+------+--------------+</code>
Ziel:Anrufe von Telefonnummern finden, die nichtin der Phone_book
Tabelle enthalten sind.
Lösungsansätze:
Hier sind drei wirksame Methoden, um dies zu erreichen:
1. NOT IN
Klausel:
Dieser Ansatz schließt Telefonnummern direkt aus der Call
-Tabelle aus, die in der Phone_book
-Tabelle vorhanden sind. Es ist effizient für kleinere Phone_book
Tische.
<code class="language-sql">SELECT * FROM Call WHERE phone_number NOT IN (SELECT phone_number FROM Phone_book);</code>
2. NOT EXISTS
Unterabfrage:
Dabei wird eine Unterabfrage verwendet, um zu prüfen, ob in Phone_book
eine Telefonnummer vorhanden ist. Es ist im Allgemeinen effizienter als NOT IN
für größere Phone_book
Tabellen.
<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
:
Diese Methode verwendet ein LEFT OUTER JOIN
zum Vergleichen von Telefonnummern. Die Abfrage gibt alle Anrufe zurück, aber nur diejenigen mit NULL
-Werten in den Phone_book
-Spalten stellen nicht aufgeführte Nummern dar.
<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>
Auswahl der besten Lösung:
Der optimale Ansatz hängt von der Größe und Struktur Ihrer Datenbank ab. Bei großen Datenmengen werden für eine bessere Leistung normalerweise die Unterabfrage NOT EXISTS
oder LEFT OUTER JOIN
bevorzugt. Für kleinere Datensätze könnte die NOT IN
-Klausel ausreichend sein. Erwägen Sie die Verwendung von EXPLAIN
, um Abfrageausführungspläne zu analysieren und die effizienteste Methode auszuwählen.
Das obige ist der detaillierte Inhalt vonWie finde ich Anrufe von Nummern, die nicht in einer Telefonbuchdatenbank aufgeführt sind?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!