Abrufen fehlender IP-Adressen in PostgreSQL
Diese Anleitung zeigt verschiedene Methoden zur Identifizierung von IP-Adressen, die in der login_log
-Tabelle vorhanden sind, aber in der ip_location
-Tabelle in einer PostgreSQL-Datenbank fehlen.
Methode 1: NOT EXISTS
Wird allgemein als der effizienteste Ansatz in PostgreSQL angesehen:
<code class="language-sql">SELECT ip FROM login_log l WHERE NOT EXISTS ( SELECT 1 -- A simple SELECT is sufficient here FROM ip_location WHERE ip = l.ip );</code>
Methode 2: LEFT JOIN
/IS NULL
Eine prägnante und oft effiziente Alternative:
<code class="language-sql">SELECT l.ip FROM login_log l LEFT JOIN ip_location i USING (ip) -- Equivalent to ON i.ip = l.ip WHERE i.ip IS NULL;</code>
Methode 3: EXCEPT
Eine kompakte Methode, aber weniger flexibel für komplexe Abfragen:
<code class="language-sql">SELECT ip FROM login_log EXCEPT ALL -- `ALL` preserves duplicates, potentially improving speed SELECT ip FROM ip_location;</code>
Methode 4: NOT IN
Mit Vorsicht verwenden, da es zu Problemen mit NULL
Werten kommen kann:
<code class="language-sql">SELECT ip FROM login_log WHERE ip NOT IN ( SELECT DISTINCT ip -- `DISTINCT` is optional FROM ip_location );</code>
Leistungsoptimierung
Die Abfrageleistung variiert je nach Datenvolumen und Tabellenindizierung. NOT EXISTS
, LEFT JOIN
und EXCEPT
bieten normalerweise eine überlegene Leistung. Stellen Sie sicher, dass in der Spalte ip
beider Tabellen entsprechende Indizes vorhanden sind, um optimale Ergebnisse zu erzielen.
Das obige ist der detaillierte Inhalt vonWie wählt man effizient Zeilen aus einer Tabelle aus, die in einer anderen in PostgreSQL nicht vorhanden sind?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!