Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memilih Rekod daripada Jadual2 Tidak Termasuk Mereka yang mempunyai Nama Padanan dalam Jadual1?
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!