Database
 sql >> Datenbank >  >> RDS >> Database

Wie findet man doppelte Zeilen in SQL?

Problem:

Sie haben doppelte Zeilen in Ihrer Tabelle, wobei nur die IDs eindeutig sind. Wie finden Sie diese doppelten Einträge?

Beispiel:

Unsere Datenbank hat eine Tabelle namens product mit Daten in den folgenden Spalten:id , name , und category .

id Name Kategorie
1 Steak Fleisch
2 Kuchen Süßigkeiten
3 d>Steak Fleisch
4 Schweinefleisch Fleisch
5 Kuchen Süßigkeiten
6 Kuchen Süßigkeiten

Lassen Sie uns doppelte Namen und Kategorien von Produkten finden. Sie können Duplikate finden, indem Sie Zeilen mit COUNT gruppieren Aggregatfunktion und Angabe eines HAVING Klausel, mit der Zeilen gefiltert werden.

Lösung:

SELECT  name,
 category,
FROM product
GROUP BY name, category
HAVING COUNT(id) >1;

Diese Abfrage gibt nur doppelte Datensätze zurück – solche mit demselben Produktnamen und derselben Kategorie:

name Kategorie
Steak Fleisch
Kuchen Süßigkeiten

In unserer Tabelle gibt es zwei doppelte Produkte:Steak aus der Kategorie Fleisch und Kuchen aus der Kategorie Süßigkeiten. Das erste Produkt wird in der Tabelle zweimal wiederholt, das zweite dreimal.

Diskussion:

Um doppelte Werte auszuwählen, müssen Sie Gruppen von Zeilen mit denselben Werten erstellen und dann die Gruppen mit einer Anzahl größer als eins auswählen. Sie können dies erreichen, indem Sie GROUP BY verwenden und ein HAVING Klausel.

Der erste Schritt besteht darin, Gruppen von Datensätzen mit denselben Werten in allen Nicht-ID-Spalten zu erstellen (in unserem Beispiel name und category ). Das machst du mit einem GROUP BY Klausel. Nach dem GROUP BY Schlüsselwort geben Sie die Namen der Spalten ein, die Sie für die Gruppierung verwenden möchten. Wir schließen die id aus Spalte, weil es der Primärschlüssel unserer Tabelle ist; Per Definition hat jede Zeile unter dieser Spalte einen anderen Wert. Wenn wir es einschließen würden, könnten wir keine Duplikate entdecken!

Wir wollen Gruppen mit mehr als einer Zeile finden; Solche Gruppen müssen per Definition ein Duplikat enthalten, solange wir nach den richtigen Spalten gruppiert haben. Dazu verwenden wir einen HAVING Klausel. Die Bedingung, die wir angeben, ist die Anzahl der Elemente in der Gruppe – COUNT(id) – muss größer als eins sein:COUNT(id) > 1 . Denken Sie daran, dass HAVING ermöglicht das Filtern von Gruppen; WHERE dient zum Filtern einzelner Zeilen.