Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Cari Alamat IP dalam Satu Jadual yang Hilang dalam Jadual Lain dalam PostgreSQL?

Bagaimana untuk Cari Alamat IP dalam Satu Jadual yang Hilang dalam Jadual Lain dalam PostgreSQL?

Patricia Arquette
Lepaskan: 2025-01-23 22:26:09
asal
506 orang telah melayarinya

How to Find IP Addresses in One Table That Are Missing in Another Table in PostgreSQL?

Artikel ini menunjukkan cara untuk mengenal pasti alamat IP yang ada dengan cekap dalam jadual login_log tetapi tiada daripada jadual ip_location dalam pangkalan data PostgreSQL. Beberapa pendekatan dibentangkan, masing-masing mempunyai kekuatan dan kelemahan tersendiri.

Mengenal pasti Alamat IP yang Hilang

Masalah utama melibatkan mencari percanggahan antara dua jadual: login_log (mengandungi percubaan log masuk dengan alamat IP) dan ip_location (mengandungi set alamat IP yang diketahui). Matlamatnya adalah untuk mengekstrak alamat IP yang dilog masuk login_log yang tidak direkodkan dalam ip_location.

Kaedah Pertanyaan Optimum

Beberapa teknik SQL boleh mencapai ini; berikut adalah yang paling cekap dan biasa digunakan:

1. NOT EXISTS Subquery: Secara amnya kaedah terpantas dalam PostgreSQL.

<code class="language-sql">SELECT ip
FROM   login_log l
WHERE  NOT EXISTS (
    SELECT 1 -- SELECT list is irrelevant, 1 is efficient
    FROM   ip_location i
    WHERE  i.ip = l.ip
);</code>
Salin selepas log masuk

Pertanyaan ini dengan cekap menyemak sama ada IP yang sepadan wujud dalam ip_location untuk setiap IP dalam login_log. SELECT 1 dalam subkueri mengoptimumkan prestasi.

2. LEFT JOIN dengan IS NULL: Alternatif yang ringkas dan selalunya pantas.

<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>
Salin selepas log masuk

Ini melakukan gabungan kiri, mengekalkan semua baris daripada login_log. Alamat IP yang tiada daripada ip_location akan mempunyai NULL dalam lajur i.ip, yang kemudiannya ditapis oleh klausa WHERE.

3. EXCEPT ALL: Kaedah padat, tetapi berkemungkinan kurang cekap untuk pertanyaan rumit.

<code class="language-sql">SELECT ip
FROM   login_log
EXCEPT ALL -- "ALL" preserves duplicates, potentially faster
SELECT ip
FROM   ip_location;</code>
Salin selepas log masuk

Operasi set ini secara langsung mencari perbezaan antara dua set alamat IP. EXCEPT ALL adalah lebih baik kerana ia lebih pantas dan mengendalikan IP pendua.

4. NOT IN (Gunakan dengan Berhati-hati): Walaupun berfungsi, NOT IN boleh menjadi perlahan, terutamanya dengan set data yang besar. Ia biasanya kurang cekap daripada kaedah sebelumnya.

<code class="language-sql">SELECT ip
FROM   login_log
WHERE  ip NOT IN (
    SELECT DISTINCT ip -- DISTINCT is optional but can improve performance slightly
    FROM   ip_location
);</code>
Salin selepas log masuk

Pendekatan ini secara langsung menyemak sama ada IP tidak hadir dalam senarai IP daripada ip_location. Walau bagaimanapun, prestasi boleh merosot dengan ketara dengan set data yang lebih besar.

Bacaan Selanjutnya:

Untuk menyelami lebih mendalam tentang teknik ini dan strategi pengoptimuman PostgreSQL yang berkaitan, rujuk sumber ini:

Atas ialah kandungan terperinci Bagaimana untuk Cari Alamat IP dalam Satu Jadual yang Hilang dalam Jadual Lain dalam PostgreSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan