Rumah  >  Artikel  >  pangkalan data  >  Bagaimanakah Saya Boleh Padamkan Rekod Pendua dalam MySQL Mengekalkan Entri Terkini untuk Setiap E-mel?

Bagaimanakah Saya Boleh Padamkan Rekod Pendua dalam MySQL Mengekalkan Entri Terkini untuk Setiap E-mel?

DDD
DDDasal
2024-11-16 02:28:03470semak imbas

How Can I Delete Duplicate Records in MySQL Keeping the Latest Entry for Each Email?

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!

Kenyataan:
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