Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Menghapuskan E-mel Pendua dalam Pernyataan SELECT SQL Semasa Mengekalkan Data Lajur Lain?

Bagaimanakah Saya Boleh Menghapuskan E-mel Pendua dalam Pernyataan SELECT SQL Semasa Mengekalkan Data Lajur Lain?

Barbara Streisand
Lepaskan: 2025-01-03 04:54:39
asal
271 orang telah melayarinya

How Can I Eliminate Duplicate Emails in a SQL SELECT Statement While Retaining Other Column Data?

Menghapuskan E-mel Pendua dalam SELECT dengan DISTINCT untuk Lajur Tunggal

Dalam pertanyaan yang mendapatkan semula berbilang lajur daripada jadual, adalah wajar untuk mengecualikan baris pendua berdasarkan lajur tertentu sambil mengekalkan nilai yang berbeza dalam lajur lain. Ini boleh mencabar kerana klausa tradisional seperti DISTINCT dan GROUP BY beroperasi pada keseluruhan baris.

Untuk menangani keperluan ini, fungsi ROW_NUMBER() boleh digunakan. Fungsi ini memberikan nombor jujukan unik kepada setiap baris dalam partition yang ditakrifkan oleh lajur tertentu. Dengan menggabungkan ROW_NUMBER() dengan klausa PARTITION BY dan ORDER BY, anda boleh membuat penarafan baris dalam setiap partition berdasarkan nilai dalam lajur yang dikehendaki.

Pertimbangkan pertanyaan berikut:

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

Untuk mengubah suai pertanyaan ini supaya ia hanya mengembalikan e-mel unik, kami boleh menggunakan yang berikut kod:

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

Fungsi ROW_NUMBER() membahagikan keputusan kepada partition berdasarkan lajur E-mel dan memberikan setiap baris kedudukan unik dalam partitionnya. Klausa ORDER BY seterusnya memastikan baris terakhir yang berlaku dalam setiap partition diletakkan di kedudukan pertama. Klausa WHERE akhir menapis hasil untuk hanya memasukkan baris dengan kedudukan 1, dengan berkesan menghapuskan e-mel pendua.

Pendekatan ini membolehkan anda menentukan mana-mana lajur sebagai asas untuk pembahagian dan pemeringkatan, memberikan fleksibiliti dalam menyesuaikan pertanyaan mengikut keperluan khusus anda.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghapuskan E-mel Pendua dalam Pernyataan SELECT SQL 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