Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memilih Rekod daripada Jadual2 Tidak Termasuk Mereka yang mempunyai Nama Padanan dalam Jadual1?

Bagaimana untuk Memilih Rekod daripada Jadual2 Tidak Termasuk Mereka yang mempunyai Nama Padanan dalam Jadual1?

Susan Sarandon
Susan Sarandonasal
2025-01-19 16:46:15591semak imbas

How to Select Records from Table2 Excluding Those with Matching Names in Table1?

Pilih daripada satu jadual untuk mengecualikan rekod daripada jadual lain

Soalan:

Memandangkan dua jadual, jadual1 mengandungi id dan nama lajur, jadual2 mengandungi id dan nama lajur, dapatkan semula semua baris dalam jadual2 yang nilai namanya tiada dalam jadual1.

Cadangan pertanyaan (salah):

<code class="language-sql">SELECT name
FROM table2
-- that are not in table1 already</code>

Penyelesaian:

Pertanyaan yang lebih tepat untuk mendapatkan hasil yang diingini ialah:

<code class="language-sql">SELECT t2.name
FROM table2 t2
LEFT JOIN table1 t1 ON t1.name = t2.name
WHERE t1.name IS NULL;</code>

Penjelasan:

Pertanyaan ini menggunakan gabungan kiri untuk memadankan setiap baris dalam jadual2 dengan baris yang sepadan dalam jadual1 berdasarkan lajur nama. Jika baris yang sepadan tidak ditemui dalam jadual1, nilai t1.name untuk baris tersebut dalam keputusan akan menjadi NULL. Dengan memilih hanya baris yang t1.name ialah NULL, kami secara berkesan mengecualikan rekod dalam jadual2 yang mempunyai nilai nama yang sepadan dalam jadual1. Sebagai alternatif, klausa NOT EXISTS boleh digunakan untuk mencapai hasil yang sama:

<code class="language-sql">SELECT name
FROM table2 t2
WHERE NOT EXISTS (
    SELECT 1
    FROM table1 t1
    WHERE t1.name = t2.name
);</code>

Versi NOT EXISTS secara amnya lebih cekap daripada versi LEFT JOIN, terutamanya pada set data yang besar.

Atas ialah kandungan terperinci Bagaimana untuk Memilih Rekod daripada Jadual2 Tidak Termasuk Mereka yang mempunyai Nama Padanan dalam Jadual1?. 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