Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Cekap Mengelak Pendua Apabila Memasukkan Data Menggunakan SQL Server INSERT INTO SELECT?

Bagaimana untuk Cekap Mengelak Pendua Apabila Memasukkan Data Menggunakan SQL Server INSERT INTO SELECT?

Susan Sarandon
Lepaskan: 2025-01-13 10:22:42
asal
157 orang telah melayarinya

How to Efficiently Avoid Duplicates When Inserting Data Using SQL Server's INSERT INTO SELECT?

SQL Server: Mencegah Rekod Pendua Semasa INSERT INTO SELECT

Memasukkan data dari satu jadual ke jadual lain dalam SQL Server memerlukan pertimbangan yang teliti untuk mengelakkan entri pendua. Ini penting apabila jadual destinasi sudah mengandungi data yang berpotensi bercanggah. Pertimbangkan contoh ini:

<code>Table1
----------
ID   Name
1    A
2    B
3    C

Table2
----------
ID   Name
1    Z</code>
Salin selepas log masuk

INSERT INTO SELECT yang mudah akan gagal kerana pendua ID (1). Walaupun kenyataan IF-ELSE bersyarat boleh dilakukan, ia tidak cekap dan menyusahkan. Alternatif yang lebih cekap wujud:

Kaedah 1: Menggunakan NOT EXISTS

Ini biasanya pendekatan yang paling berkesan:

<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>
Salin selepas log masuk

Hanya baris dari Table1 yang ID belum wujud dalam Table2 dimasukkan.

Kaedah 2: Menggunakan NOT IN

Kaedah ini menapis pendua semasa proses pemilihan:

<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>
Salin selepas log masuk

Pendekatan ini kurang cekap daripada NOT EXISTS, terutamanya dengan set data yang besar.

Kaedah 3: Menggunakan LEFT JOIN dan IS NULL

Ini biasanya kaedah yang paling tidak berkesan:

<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>
Salin selepas log masuk

A LEFT JOIN mengenal pasti baris yang tidak sepadan; hanya mereka yang mempunyai nilai NULL dalam Table2.id dimasukkan.

Untuk prestasi optimum, terutamanya dengan set data yang besar, kaedah NOT EXISTS disyorkan. Elakkan pendekatan LEFT JOIN melainkan faktor lain menjadikannya lebih baik. Pilih kaedah yang paling sesuai dengan keperluan khusus anda dan saiz set data.

Atas ialah kandungan terperinci Bagaimana untuk Cekap Mengelak Pendua Apabila Memasukkan Data Menggunakan SQL Server INSERT INTO SELECT?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan