Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Mengeluarkan Alamat E-mel Pendua dalam MySQL Sambil Menyimpan Rekod Terkini?

Bagaimana untuk Mengeluarkan Alamat E-mel Pendua dalam MySQL Sambil Menyimpan Rekod Terkini?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-15 21:51:02598semak imbas

How to Remove Duplicate Email Addresses in MySQL While Keeping the Most Recent Record?

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:

  1. Kenalpasti E-mel Pendua:

    • Dapatkan senarai semua e-mel pendua alamat menggunakan pertanyaan:

      SELECT email
      FROM test
      GROUP BY email
      HAVING COUNT(*) > 1;
  2. 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;
  3. 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!

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