Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memilih Baris dengan Cekap dari Satu Jadual Tidak Hadir dalam Satu Lagi dalam PostgreSQL?

Bagaimana untuk Memilih Baris dengan Cekap dari Satu Jadual Tidak Hadir dalam Satu Lagi dalam PostgreSQL?

Linda Hamilton
Linda Hamiltonasal
2025-01-23 22:22:10695semak imbas

How to Efficiently Select Rows from One Table Not Present in Another in PostgreSQL?

Mengambil semula Alamat IP yang Hilang dalam PostgreSQL

Panduan ini menunjukkan beberapa kaedah untuk mengenal pasti alamat IP yang terdapat dalam jadual login_log tetapi tiada daripada jadual ip_location dalam pangkalan data PostgreSQL.

Kaedah 1: NOT EXISTS

Secara amnya dianggap sebagai pendekatan paling cekap dalam PostgreSQL:

<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>

Kaedah 2: LEFT JOIN/IS NULL

Alternatif yang ringkas dan selalunya cekap:

<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>

Kaedah 3: EXCEPT

Kaedah padat, tetapi kurang fleksibel untuk pertanyaan kompleks:

<code class="language-sql">SELECT ip 
FROM   login_log

EXCEPT ALL  -- `ALL` preserves duplicates, potentially improving speed
SELECT ip
FROM   ip_location;</code>

Kaedah 4: NOT IN

Gunakan dengan berhati-hati kerana kemungkinan isu dengan nilai NULL:

<code class="language-sql">SELECT ip 
FROM   login_log
WHERE  ip NOT IN (
   SELECT DISTINCT ip  -- `DISTINCT` is optional
   FROM   ip_location
   );</code>

Pengoptimuman Prestasi

Prestasi pertanyaan berbeza-beza bergantung pada volum data dan pengindeksan jadual. NOT EXISTS, LEFT JOIN dan EXCEPT biasanya menawarkan prestasi unggul. Pastikan indeks yang sesuai diletakkan pada lajur ip kedua-dua jadual untuk hasil yang optimum.

Atas ialah kandungan terperinci Bagaimana untuk Memilih Baris dengan Cekap dari Satu Jadual Tidak Hadir dalam Satu Lagi dalam PostgreSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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