Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mencegah Entri Pendua Apabila Menggunakan INSERT INTO SELECT dalam SQL Server?
Mengelakkan Data Pendua dengan SQL Server INSERT INTO SELECT
Apabila menggunakan INSERT INTO SELECT
dalam SQL Server, entri pendua boleh timbul dengan mudah jika jadual sasaran sudah mengandungi data yang dimasukkan. Untuk mengelakkan ini, penapisan yang cekap adalah penting sebelum dimasukkan.
Mari kita gambarkan dengan contoh. Kami mahu memasukkan data daripada Table1
ke dalam Table2
, tetapi elakkan ID pendua:
<code>Table1: ---------- ID Name 1 A 2 B 3 C Table2: ---------- ID Name 1 Z</code>
Menggunakan IF-ELSE
pernyataan adalah mungkin, tetapi menjadi sukar digunakan dan memerlukan berbilang INSERT INTO
pernyataan.
Penyelesaian Cekap: NOT EXISTS
, NOT IN
dan LEFT JOIN
Kaedah yang lebih cekap menggunakan NOT EXISTS
, NOT IN
dan LEFT JOIN
untuk menapis data sedia ada dalam Table2
sebelum dimasukkan.
1. Menggunakan NOT EXISTS
:
Pendekatan ini menyemak kewujudan setiap baris daripada Table1
dalam Table2
sebelum memasukkan.
<code class="language-sql">INSERT INTO TABLE_2 (Id, name) SELECT t1.id, t1.name FROM TABLE_1 t1 WHERE NOT EXISTS (SELECT id FROM TABLE_2 t2 WHERE t2.id = t1.id);</code>
2. Menggunakan NOT IN
:
Serupa dengan NOT EXISTS
, NOT IN
membandingkan ID, hanya memasukkan baris yang ID tidak ditemui dalam Table2
.
<code class="language-sql">INSERT INTO TABLE_2 (Id, name) SELECT t1.id, t1.name FROM TABLE_1 t1 WHERE t1.id NOT IN (SELECT id FROM TABLE_2);</code>
3. Menggunakan LEFT JOIN
dengan IS NULL
:
A LEFT JOIN
mengenal pasti baris dalam Table1
tiada padanan dalam Table2
. IS NULL
penapis untuk baris yang tidak sepadan ini.
<code class="language-sql">INSERT INTO TABLE_2 (Id, name) SELECT t1.id, t1.name FROM TABLE_1 t1 LEFT JOIN TABLE_2 t2 ON t2.id = t1.id WHERE t2.id IS NULL;</code>
Walaupun ketiga-tiga kaedah mencapai hasil yang sama, NOT EXISTS
secara amnya menawarkan prestasi unggul, terutamanya dengan set data yang besar, dan oleh itu pendekatan yang disyorkan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencegah Entri Pendua Apabila Menggunakan INSERT INTO SELECT dalam SQL Server?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!