Mencari Rekod Bercanggah Dengan Cekap Antara Dua Jadual SQL
Pentadbir pangkalan data selalunya perlu mengenal pasti rekod dalam satu jadual tanpa rekod yang lain. Artikel ini menunjukkan pendekatan SQL yang cekap untuk tugas biasa ini.
Mari kita pertimbangkan dua jadual, table1
dan table2
, setiap satu dengan lajur id
dan name
:
<code>table1: (id, name) table2: (id, name)</code>
Matlamatnya adalah untuk mencari nama dalam table2
tiada daripada table1
. Pendekatan naif menggunakan NOT IN
adalah mungkin tetapi tidak cekap:
<code class="language-sql">SELECT name FROM table2 WHERE NOT name IN (SELECT name FROM table1);</code>
Kaedah unggul menggunakan LEFT JOIN
:
<code class="language-sql">SELECT t1.name FROM table1 t1 LEFT JOIN table2 t2 ON t2.name = t1.name WHERE t2.name IS NULL;</code>
Penjelasan Pertanyaan
Pertanyaan ini menggunakan LEFT JOIN
untuk menggabungkan baris daripada table1
dan table2
berdasarkan nilai name
yang sepadan. Untuk setiap baris dalam table1
, ia mencari padanan dalam table2
. Jika padanan ditemui, hasilnya termasuk data daripada kedua-dua jadual. Walau bagaimanapun, jika tiada padanan wujud dalam table2
, medan table2
dalam keputusan ialah NULL
. Klausa WHERE
menapis hasil ini, hanya mengembalikan baris dengan t2.name
ialah NULL
, menunjukkan nama tidak sepadan.
Faedah Pendekatan ini
Kaedah ini menawarkan beberapa kelebihan utama:
LEFT JOIN
mengelakkan overhed prestasi pertanyaan bersarang, secara amnya menghasilkan pelaksanaan yang lebih pantas.LEFT JOIN
adalah jelas dan mudah difahami, menjadikan pertanyaan lebih mudah untuk diselenggara dan nyahpepijat.Walaupun prestasi optimum mungkin berbeza-beza berdasarkan spesifik pangkalan data, pendekatan LEFT JOIN
ini menawarkan penyelesaian yang mantap dan cekap untuk mengenal pasti rekod tidak sepadan antara jadual SQL.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencari Rekod Tidak Padanan dengan Cekap Antara Dua Jadual SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!