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;
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;
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;
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!