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.) )
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
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
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!