Cara Memadam Rekod Pendua dalam MySQL Semasa Mengekalkan Yang Terkini
Apabila berurusan dengan jadual yang mengandungi pengecam unik dan alamat e-mel pendua, ia adalah selalunya perlu untuk mengalih keluar pendua ini sambil mengekalkan rekod terkini. MySQL menyediakan beberapa kaedah untuk mencapai objektif ini.
Satu pendekatan melibatkan mengenal pasti alamat e-mel yang diulang dan mencari rekod terkini, yang diwakili oleh ID maksimum, untuk setiap e-mel ini. Ini boleh dilakukan menggunakan gabungan fungsi GROUP BY, HAVING dan MAX().
Setelah rekod terbaharu dikenal pasti, langkah seterusnya ialah memadam semua rekod pendua dengan ID yang lebih rendah daripada rekod tersebut ID maksimum masing-masing. Ini boleh dicapai dengan kenyataan DELETE yang menggunakan INNER JOIN untuk membandingkan alamat e-mel dan nilai ID.
Contoh Jadual Pangkalan Data
Untuk menggambarkan proses ini, pertimbangkan jadual berikut bernama "ujian":
ID EMAIL ---------------------- -------------------- 1 aaa 2 bbb 3 ccc 4 bbb 5 ddd 6 eee 7 aaa 8 aaa 9 eee
Mengenal pasti Pendua E-mel
select email from test group by email having count(*) > 1;
Pertanyaan ini mengembalikan hasil berikut, menunjukkan bahawa 'aaa', 'bbb' dan 'eee' ialah e-mel berulang:
EMAIL -------------------- aaa bbb eee
Mencari Rekod Terkini
select max(id) as lastId, email from test where email in ( select email from test group by email having count(*) > 1 ) group by email;
Pertanyaan ini mendapatkan semula ID maksimum dan alamat e-mel yang sepadan untuk setiap pendua:
LASTID EMAIL ---------------------- -------------------- 8 aaa 4 bbb 9 eee
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;
Selepas melaksanakan pertanyaan ini, jadual "ujian" akan mengandungi hanya yang paling terkini rekod untuk setiap alamat e-mel, mengakibatkan perkara berikut data:
+----+-------+ | id | email | +----+-------+ | 3 | ccc | | 4 | bbb | | 5 | ddd | | 8 | aaa | | 9 | eee | +----+-------+
Pertanyaan Padam Dioptimumkan
Pertanyaan pemadaman alternatif yang lebih dioptimumkan disediakan di bawah:
delete from test where id not in ( select max(id) from test group by email)
Atas ialah kandungan terperinci Bagaimana untuk Memadam Rekod Pendua dalam MySQL Semasa Mengekalkan Yang Terkini?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!