Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Mengeluarkan Alamat E-mel Unik dengan Cekap daripada Pangkalan Data Semasa Mengekalkan Data Lajur Lain?

Bagaimanakah Saya Boleh Mengeluarkan Alamat E-mel Unik dengan Cekap daripada Pangkalan Data Semasa Mengekalkan Data Lajur Lain?

Barbara Streisand
Lepaskan: 2025-01-04 09:27:35
asal
425 orang telah melayarinya

How Can I Efficiently Extract Unique Email Addresses from a Database While Retaining Other Column Data?

Pengoptimuman Pertanyaan DISTINCT untuk Pengekstrakan E-mel Unik

Apabila menanyakan pangkalan data untuk mendapatkan data daripada berbilang lajur, klausa DISTINCT biasanya digunakan untuk menghapuskan baris pendua dan memastikan keunikan. Walau bagaimanapun, dalam senario tertentu, ia mungkin perlu menggunakan DISTINCT pada lajur tertentu sahaja, seperti alamat e-mel.

Pertimbangkan pertanyaan berikut:

SELECT ID, Email, ProductName, ProductModel FROM Products;
Salin selepas log masuk

Jika anda perlu mengubah suai ini pertanyaan untuk mengembalikan hanya alamat e-mel yang berbeza, membenarkan pendua dalam lajur lain, klausa DISTINCT tradisional mungkin tidak mencukupi. Sebaliknya, anda boleh menggunakan teknik yang dipanggil "penomboran baris dalam partition."

Pengoptimuman Pertanyaan Menggunakan Fungsi Tetingkap

Untuk mencapai hasil yang diinginkan, kami boleh menggunakan fungsi tetingkap dalam subquery. Dalam SQL Server 2005 atau lebih tinggi, pertanyaan berikut boleh digunakan:

SELECT *
FROM (
    SELECT ID, 
            Email, 
            ProductName, 
            ProductModel,
            ROW_NUMBER() OVER(PARTITION BY Email ORDER BY ID DESC) rn
    FROM Products
) a
WHERE rn = 1;
Salin selepas log masuk

Pertanyaan ini mula-mula mencipta jadual terbitan menggunakan fungsi tetingkap untuk menetapkan setiap baris dalam setiap partition e-mel nombor baris unik (rn), bermula dari baris terakhir. Pertanyaan paling luar kemudian menapis jadual terbitan untuk memasukkan hanya baris dengan nilai rn 1, memastikan kemasukan hanya satu baris bagi setiap alamat e-mel unik.

Contoh dengan Penapisan

Selain itu, anda boleh memasukkan kriteria penapisan ke dalam subkueri untuk memperhalusi hasilnya. Sebagai contoh, pertanyaan yang diubah suai berikut mengehadkan hasil kepada produk dengan model dan nama tertentu yang mengandungi rentetan tertentu:

SELECT *
FROM (
    SELECT ID, 
            Email, 
            ProductName, 
            ProductModel,
            ROW_NUMBER() OVER(PARTITION BY Email ORDER BY ID DESC) rn
    FROM Products
    WHERE ProductModel = 2
      AND ProductName LIKE 'CYBER%'
) a
WHERE rn = 1;
Salin selepas log masuk

Dengan menggunakan fungsi tetingkap dan penomboran baris dalam sekatan, anda boleh menghapuskan alamat e-mel pendua dengan berkesan semasa mengekalkan keunikan dalam lajur lain, membolehkan perolehan semula data yang cekap dan fleksibel.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengeluarkan Alamat E-mel Unik dengan Cekap daripada Pangkalan Data Semasa Mengekalkan Data Lajur Lain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan