Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mencegah Entri Pendua Apabila Menggunakan INSERT INTO SELECT dalam SQL Server?

Bagaimanakah Saya Boleh Mencegah Entri Pendua Apabila Menggunakan INSERT INTO SELECT dalam SQL Server?

Barbara Streisand
Barbara Streisandasal
2025-01-13 11:59:55992semak imbas

How Can I Prevent Duplicate Entries When Using INSERT INTO SELECT in 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!

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