Heim >Datenbank >MySQL-Tutorial >Wie entferne ich doppelte E-Mails, während andere Spaltenduplikate in SQL erhalten bleiben?

Wie entferne ich doppelte E-Mails, während andere Spaltenduplikate in SQL erhalten bleiben?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-02 16:32:39573Durchsuche

How to Remove Duplicate Emails While Keeping Other Column Duplicates in SQL?

E-Mail-Duplikate in SQL-Abfrage mit DISTINCT eliminieren

In der bereitgestellten SQL-Abfrage möchten Sie sie so ändern, dass eindeutige E-Mail-Einträge zurückgegeben und gleichzeitig zugelassen werden Duplikate in anderen Spalten. Da DISTINCT und GROUP BY ganze Zeilen betreffen, ist ein anderer Ansatz erforderlich, um dieses Ziel zu erreichen.

Die Lösung liegt in der Einbindung einer Unterabfrage, die die Funktion ROW_NUMBER() von SQL Server nutzt. Durch die Partitionierung des Datensatzes nach E-Mail und die Sortierung nach absteigender ID mithilfe der Funktion ROW_NUMBER() können wir jeder Zeile innerhalb jeder E-Mail-Gruppe einen eindeutigen Rang zuweisen.

Die Hauptabfrage wählt dann alle Zeilen aus, in denen die Der Rangwert (rn) ist gleich 1, wodurch sichergestellt wird, dass nur eine Zeile für jede einzelne E-Mail in den Ergebnissen enthalten ist.

Hier ist die Änderung Abfrage:

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

Diese Abfrage eliminiert effektiv doppelte E-Mails, während Duplikate in anderen Spalten erhalten bleiben. Sie können die Abfrage weiter verfeinern, indem Sie der Unterabfrage bedingte Filter hinzufügen, wie in diesem Beispiel gezeigt:

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

Diese modifizierte Abfrage beschränkt die Ergebnisse auf Produkte mit einem ProductModel von 2 und Namen, die mit „CYBER%“ beginnen. ', wobei die nicht doppelten E-Mail-Einträge innerhalb dieser Kriterien beibehalten werden.

Das obige ist der detaillierte Inhalt vonWie entferne ich doppelte E-Mails, während andere Spaltenduplikate in SQL erhalten bleiben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn