Rumah >pangkalan data >tutorial mysql >Bagaimana untuk mencari alamat IP yang hilang di antara dua jadual?
Senario:
Anda mempunyai dua jadual: login_log
dan ip_location
. Matlamatnya adalah untuk mengenal pasti semua alamat IP yang direkodkan dalam login_log
yang tidak hadir dalam ip_location
.
Penyelesaian SQL:
Beberapa pendekatan SQL boleh mencapai ini. Mari kita periksa tiga kaedah biasa:
NOT EXISTS
Subquery: Kaedah ini secara amnya cekap dan serasi secara meluas.
<code class="language-sql">SELECT ip FROM login_log WHERE NOT EXISTS ( SELECT 1 FROM ip_location WHERE login_log.ip = ip_location.ip );</code>
Pertanyaan ini menyemak sama ada setiap alamat IP dalam login_log
mempunyai entri yang sepadan dalam ip_location
. Jika tiada padanan ditemui, alamat IP disertakan dalam keputusan. Ambil perhatian bahawa SELECT 1
selalunya lebih cekap daripada SELECT ip
dalam subkueri.
LEFT JOIN
dengan NULL
Semak: Pendekatan ini menggunakan LEFT JOIN
untuk menggabungkan jadual, kemudian menapis baris dengan lajur ip
dalam ip_location
ialah NULL
, menunjukkan alamat IP hilang.
<code class="language-sql">SELECT l.ip FROM login_log l LEFT JOIN ip_location i ON l.ip = i.ip WHERE i.ip IS NULL;</code>
EXCEPT
(atau MINUS
dalam sesetengah pangkalan data): Operasi berasaskan set ini mencari secara langsung perbezaan antara alamat IP dalam dua jadual. Ambil perhatian bahawa sintaks mungkin berbeza sedikit bergantung pada sistem pangkalan data khusus anda (cth., MINUS
dalam Oracle).
<code class="language-sql">SELECT ip FROM login_log EXCEPT SELECT ip FROM ip_location;</code>
Pertimbangan Prestasi:
Kaedah optimum bergantung pada sistem pangkalan data anda, saiz jadual dan pengindeksan. NOT EXISTS
sering berprestasi baik dalam PostgreSQL, manakala LEFT JOIN
boleh menjadi cekap dalam sistem lain. EXCEPT
boleh ringkas tetapi mungkin tidak selalunya yang terpantas. Elakkan NOT IN
dengan subkueri, kerana ia boleh menjadi lebih perlahan, terutamanya dengan set data yang besar. Pengindeksan yang sesuai pada lajur ip
dalam kedua-dua jadual adalah penting untuk prestasi dalam semua kes.
Atas ialah kandungan terperinci Bagaimana untuk mencari alamat IP yang hilang di antara dua jadual?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!