Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengelakkan Pendua dengan Cekap Apabila Menggunakan INSERT INTO SELECT dalam SQL Server?

Bagaimana untuk Mengelakkan Pendua dengan Cekap Apabila Menggunakan INSERT INTO SELECT dalam SQL Server?

Linda Hamilton
Linda Hamiltonasal
2025-01-13 11:21:43981semak imbas

How to Efficiently Avoid Duplicates When Using INSERT INTO SELECT in SQL Server?

Pernyataan INSERT INTO SELECT dalam SQL Server dengan cekap mengelakkan data pendua

Dalam operasi pangkalan data, memasukkan data dari satu jadual ke jadual lain sambil mengelakkan pertindihan adalah tugas biasa. Artikel ini membincangkan cara menambahkan rekod dalam Jadual1 ke Jadual2 dengan cekap untuk mengelakkan pertindihan ID.

Salah satu cara ialah menggunakan pernyataan IF-ELSE untuk menyemak sama ada ID wujud dalam Jadual2 sebelum memasukkan:

<code class="language-sql">IF NOT EXISTS(SELECT 1 FROM Table2 WHERE Id=1)
  INSERT INTO Table2 (Id, name) SELECT Id, name FROM Table1 
ELSE
  INSERT INTO Table2 (Id, name) SELECT Id, name FROM Table1 WHERE Table1.Id1</code>

Walau bagaimanapun, kaedah ini memerlukan menulis beberapa pernyataan INSERT INTO-SELECT berdasarkan syarat. Untuk mencari penyelesaian yang lebih cekap, kami meneroka tiga alternatif:

1. Guna 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>

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>

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>

Antara ketiga-tiga kaedah ini, kaedah LEFT JOIN/IS NULL adalah kurang cekap berbanding kaedah lain. Untuk memasukkan data dalam pertanyaan INSERT INTO SELECT SQL Server sambil mengelakkan pertindihan, teknik NOT EXISTS dan NOT IN memberikan prestasi terbaik.

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Pendua dengan Cekap Apabila Menggunakan INSERT INTO SELECT dalam SQL Server?. 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