Kaedah untuk mengelakkan data pendua dalam SQL Server INSERT INTO SELECT pernyataan
Apabila menggunakan pernyataan INSERT INTO SELECT, adalah penting untuk mengelakkan pemasukan data pendua. Artikel ini menerangkan beberapa cara berkesan untuk mengelakkan masalah sedemikian dalam SQL Server tanpa menggunakan pernyataan bersyarat seperti IF-ELSE.
Kaedah 1: Gunakan NOT EXISTS
<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>
Pertanyaan ini menghalang sisipan pendua dengan menyemak sama ada ID yang sepadan wujud dalam TABLE_2. Jika sudah wujud, langkau baris ini.
Kaedah 2: Gunakan NOT IN
<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>
Serupa dengan NOT EXISTS, klausa NOT IN juga mengecualikan ID yang sudah wujud dalam TABLE_2. Ia menyemak sama ada ID dalam TABLE_1 berada dalam TABLE_2 dan memasukkan hanya jika tiada.
Kaedah 3: Gunakan LEFT JOIN/IS NULL
<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>
Gunakan LEFT JOIN dan IS NULL untuk mengenal pasti dengan lebih jelas baris yang perlu disisipkan. Pertanyaan ini memilih dan memasukkan semua baris dalam TABLE_1 yang tidak mempunyai ID yang sepadan dalam TABLE_2.
Perbandingan prestasi
Dari segi prestasi, LEFT JOIN/IS NULL secara amnya tidak secekap NOT EXISTS dan NOT IN. Ini kerana LEFT JOIN memerlukan pengimbasan lebih banyak jadual dan baris serta menggunakan lebih banyak sumber. Untuk set data yang besar, disyorkan untuk menggunakan NOT EXISTS atau NOT IN.
Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Baris Pendua dalam SQL Server INSERT INTO SELECT Tanpa Pernyataan IF-ELSE?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!