Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Menyalin Baris Antara Jadual Tanpa Membuat Pendua?

Bagaimana untuk Menyalin Baris Antara Jadual Tanpa Membuat Pendua?

DDD
Lepaskan: 2024-12-27 05:14:13
asal
581 orang telah melayarinya

How to Copy Rows Between Tables Without Creating Duplicates?

Menyalin Baris Antara Jadual Tanpa Mendua Data

Apabila memindahkan data dari satu jadual ke jadual lain, adalah penting untuk mengelakkan baris pendua daripada dimasukkan. Untuk mencapai matlamat ini, kami memerlukan kaedah yang menapis rekod sedia ada.

Dalam pendekatan awal anda, anda cuba menggunakan klausa WHERE dengan subkueri untuk mengenal pasti baris unik. Walau bagaimanapun, subkueri kekurangan kriteria untuk menentukan pendua.

Penyelesaian Menggunakan Subkueri dengan Penapisan WHERE

Untuk menapis pendua dengan berkesan, anda boleh mengubah suai subkueri anda seperti berikut:

INSERT INTO destTable
SELECT Field1,Field2,Field3,... 
FROM srcTable
WHERE NOT EXISTS(SELECT * 
                 FROM destTable 
                 WHERE (srcTable.Field1=destTable.Field1 and
                       SrcTable.Field2=DestTable.Field2...etc.)
                 )
Salin selepas log masuk

Subkueri yang dikemas kini ini menambah syarat yang membandingkan medan tertentu antara jadual sumber dan destinasi untuk menentukan sama ada pendua wujud.

Penyelesaian Menggunakan Outer Join

Sebagai alternatif, anda boleh menggunakan gabungan luar untuk mencapai hasil yang sama. Cantuman luar mengambil semula semua baris daripada satu jadual dan memadankan baris daripada jadual lain, meninggalkan baris yang tidak sepadan sebagai NULL.

INSERT INTO destTable
SELECT s.field1,s.field2,s.field3,... 
FROM srcTable s 
       LEFT JOIN destTable d ON (d.Key1 = s.Key1 AND d.Key2 = s.Key2 AND...)
WHERE d.Key1 IS NULL
Salin selepas log masuk

Dalam kes ini, cantuman luar memadankan baris berdasarkan medan utamanya (Key1, Key2, dll.). Baris dalam jadual sumber yang tidak sepadan dengan mana-mana baris dalam jadual destinasi akan mempunyai nilai NULL untuk medan utama dan baris ini akan dimasukkan ke dalam jadual destinasi.

Pertimbangan Tambahan

Jika anda hanya bimbang tentang menghalang pendua daripada jadual sumber, anda boleh menggunakan kata kunci yang berbeza dalam SELECT pernyataan:

INSERT INTO destTable
SELECT Distinct field1,field2,field3,... 
FROM srcTable  
Salin selepas log masuk

Akhir sekali, menyatakan medan khusus dalam pernyataan INSERT anda dan bukannya menggunakan SELECT * adalah disyorkan atas sebab prestasi.

Atas ialah kandungan terperinci Bagaimana untuk Menyalin Baris Antara Jadual Tanpa Membuat Pendua?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan