MySQL: Memadamkan Rekod Pendua Semasa Mengekalkan Yang Terbaharu
Soalan: Bagaimana saya boleh menghapuskan alamat e-mel pendua dalam jadual MySQL sambil mengekalkan yang paling terkini berdasarkan ID unik medan?
Penyelesaian:
Untuk mencapainya, ikuti langkah berikut:
Kenalpasti E-mel Pendua:
Dapatkan senarai semua e-mel pendua alamat menggunakan pertanyaan:
SELECT email FROM test GROUP BY email HAVING COUNT(*) > 1;
Cari ID Terkini untuk Setiap Pendua:
Tentukan ID terkini yang dikaitkan dengan setiap e-mel pendua menggunakan pertanyaan:
SELECT MAX(id) AS lastID, email FROM test WHERE email IN ( SELECT email FROM test GROUP BY email HAVING COUNT(*) > 1 ) GROUP BY email;
Padam Pendua Terlama:
Lakukan operasi PADAM untuk alih keluar e-mel pendua dengan ID kurang daripada yang terkini satu:
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;
Versi Dioptimumkan:
Versi dioptimumkan berikut memberikan hasil yang sama sambil berpotensi meningkatkan prestasi :
DELETE test FROM test INNER JOIN ( SELECT MAX(id) AS lastID, email FROM test GROUP BY email HAVING COUNT(*) > 1) duplic ON duplic.email = test.email WHERE test.id < duplic.lastID;
Penyataan DELETE yang disemak ini memfokuskan pada menghapuskan yang tertua pendua.
Pilihan Tambahan:
Sebagai alternatif, anda boleh menggunakan pertanyaan ini yang disediakan oleh Rene Limon:
DELETE FROM test WHERE id NOT IN ( SELECT MAX(id) FROM test GROUP BY email);
Pendekatan ini mengekalkan yang paling terkini alamat e-mel pendua berdasarkan ID maksimum.
Atas ialah kandungan terperinci Bagaimana untuk Mengeluarkan Alamat E-mel Pendua dalam MySQL Sambil Menyimpan Rekod Terkini?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!