Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Mengeluarkan Baris Pendua dengan Cekap Kecuali untuk Contoh Terawal?

Bagaimana untuk Mengeluarkan Baris Pendua dengan Cekap Kecuali untuk Contoh Terawal?

Barbara Streisand
Barbara Streisandasal
2024-10-31 11:34:01768semak imbas

How to Efficiently Remove Duplicate Rows Except for the Earliest Instance?

Mengalih Keluar Baris Pendua Dengan Cekap Kecuali Contoh Terawal

Masalah:

Anda mempunyai jadual mengandungi data dengan banyak entri pendua yang disebabkan oleh penyerahan pengguna. Matlamat anda adalah untuk menghapuskan baris pendua ini berdasarkan medan subscriberEmail, hanya meninggalkan rekod yang paling awal diserahkan. Dalam erti kata lain, anda ingin mengenal pasti semua e-mel pendua dan memadamkan baris yang sepadan sambil mengekalkan penyerahan asal.

Penyelesaian:

1. Pendekatan Sertai Diri:

Daripada menukar jadual, anda boleh memanfaatkan penyertaan diri untuk mencapai matlamat anda:

<code class="sql">delete x
from myTable x
join myTable z on x.subscriberEmail = z.subscriberEmail
where x.id > z.id</code>

Dalam pertanyaan ini:

  • x dan z ialah alias yang mewakili dua kejadian dalam jadual yang sama.
  • Klausa JOIN ​​sepadan dengan rekod berdasarkan padanan subscriberEmail nilai.
  • Klausa WHERE memilih rekod daripada x di mana id lebih besar daripada id yang sepadan rekod dalam z. Ini memastikan bahawa hanya baris pendua dengan ID yang lebih tinggi dipilih untuk dipadamkan.

2. Pertimbangan Tambahan:

Untuk mengelakkan sisipan pendua pada masa hadapan, pertimbangkan untuk mencipta INDEKS UNIK pada lajur subscriberEmail.

Faedah:

Pendekatan ini mengalih keluar baris pendua dengan cekap tanpa perlu membuat jadual sementara. Ia menggunakan struktur jadual sedia ada dan mengekalkan identiti unik setiap baris berdasarkan medan id.

Atas ialah kandungan terperinci Bagaimana untuk Mengeluarkan Baris Pendua dengan Cekap Kecuali untuk Contoh Terawal?. 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