Pemadaman Berkesan Rekod Pendua dalam MySQL dengan Pemeliharaan ID Terkini
Masalah:
Dalam jadual MySQL dengan kedua-dua ID unik dan medan e-mel, alamat e-mel pendua timbul. Tugasnya adalah untuk menghapuskan semua kecuali yang terkini (yang paling baru dimasukkan) bagi setiap e-mel pendua sambil mengekalkan ID uniknya.
Penyelesaian:
Masalah boleh diselesaikan melalui proses dua langkah yang mengenal pasti dan menghapuskan e-mel pendua.
Langkah 1: Mengenalpasti E-mel Pendua
select email from test group by email having count(*) > 1;
Pertanyaan ini mengembalikan senarai semua e-mel yang muncul lebih daripada sekali dalam jadual.
Langkah 2: Mengasingkan dan Memadam Rekod Pendua
delete test from test inner join ( select max(id) as lastId, email from test where email in ( select email from test group by email having count(*) > 1 ) group by email ) duplic on duplic.email = test.email where test.id < duplic.lastId;
Pertanyaan ini melakukan gabungan kiri antara jadual utama (ujian) dan subkueri (pendua) yang mengandungi ID terkini untuk setiap e-mel pendua. Ia kemudian memadamkan semua rekod pendua dengan ID kurang daripada ID terkini, dengan berkesan mengekalkan hanya contoh yang paling baru dimasukkan setiap e-mel.
Penyelesaian Alternatif:
Sebuah yang lebih ringkas dan penyelesaian yang cekap disediakan di bawah:
delete from test where id not in ( select max(id) from test group by email );
Pertanyaan ini mengenal pasti dan memadam semua rekod itu bukan contoh e-mel pendua terkini.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Padamkan Rekod Pendua dalam MySQL Mengekalkan Entri Terkini untuk Setiap E-mel?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!