Hier ein einfaches SQL Skript um doppelte Datensätze in einer Tabelle zu finden und anzeigen zu lassen.
Im Beispiel gehen wir von folgenden Informationen aus:
Die Tabelle in der Datenbank heißt: Products
Das Referenzfeld in der Tabelle heißt: productcode
SELECT productcodes, COUNT(productcode) AS NumOccurrences FROM Products GROUP BY productcode HAVING ( COUNT(productcode) > 1 )
Angezeigt bekommt man alle productcodes der Datensätze die mehr als einmal in der Tabelle vorhanden sind.
1000 Dank für den Code, das hat meinen Abend gerettet 😉
Danke!
Danke für den tip
Hey, vielen Dank für den Code. Mir hat es keinen Abend gerettet, aber viel Arbeit gespart.
Danke!
Super, danke für den Code.
Aber wie schaffe ich es nun, dass mir auch noch andere Spaltennamen mit angezeigt werden?
Hallo Sandro,
bin mir nicht ganz sicher ob ich dein Frage richtig verstehe, aber sobald du group by verwendest und eine Spalte anzeigen möchtest, welche du nicht gruppiert hast mit du die jeweiligen Spalten mit Hilfe einer Aggregatfunktionen im Select anzeigen lassen.
Schau mal hier: http://sql.1keydata.com/de/sql-funktionen.php
Hoffe das hilft dir
Beste Grüße
HP
Hallo Hans Peter,
danke für Deine schnelle Antwort. Ja, irgendwie habe ich ein Problem mit der Aggreatfunktion. Folgender Hintergrund: Unser System ist seinerzeit unsauber programmiert worden, weshalb wir nickname – Doubletten haben, die natürlich zu Problemen führen. Ich habe das obige Codebeispiel an unsere DB angepasst und erhalte über 7200 Einträge. Spitzenreiter ist der Nickname „Müller“ mit 275 Dopplungen 🙂
SELECT nickname,
COUNT(nickname) AS NumOccurrences
FROM Personen
GROUP BY nickname
HAVING ( COUNT(nickname) > 1 )
ORDER BY NumOccurrences
Jetzt hätte ich aber gerne noch ein paar Spalten mehr angezeigt, vor allem halt die „pn“ (der Primärschlüssel der Tabelle) und die Email Adresse (zur Kontaktaufnahme). Wenn ich das Ganze jetzt entsprechend anpasse:
select pn, persnr, nickname, individualpw, Nachname, Vorname, wohnort, Geburtsdatum, EMail, loginversuch, sichtbar,
COUNT(nickname) AS NumOccurrences
FROM Personen
GROUP BY pn, persnr, nickname, individualpw, Nachname, Vorname, wohnort, Geburtsdatum, EMail, loginversuch, sichtbar
HAVING ( COUNT(nickname) > 1 )
ORDER BY NumOccurrences
Bekomme ich aber leider 0 Einträge angezeigt. Wo ist mein Denkfehler?
Um das zu erreichen musst Du einen anderen Weg gehen, denn mit dem Script von Hans-Peter kannst Du nur herausfinden, ob Du Dubletten hast und welche (z.B. „Müller“ in Deinem Fall). Hier ein Link, der Dir weiterhelfen sollte: Identify and delete duplicates from SQL Server tables
HTH
Kostja
Danke Kostja,
ich kämpf mich mal da durch!
Vielleicht hilft Dir das hier weiter: SQL – Duplikate finden und löschen
Gruss MK
Hallo
danke für das Script.
Kleine Frage: da steht SELECT productcodes, …
müsste es nicht SELECT productcode, … heissen, also code ohne S.
Gruss
Daniel M
Hallo Daniel,
du hast natürlich recht, das „s“ ist zu viel.
Ist als Sollbruchstelle eingebaut 🙂
Hat Jahre gedauert bis es jemand aufgefallen ist.
Danke für den Hinweis
HP
Warum berechnest du eigentlich 2 x COUNT(productcode) ?
funktioniert, danke! masel Frage ist auch berechtigt und der zweite count eigentlich unnötig, denn HAVING ( NumOccurrences > 1 ) funktioniert auch.
Danke für den guten Tipp! So konnte ich mein Gesicht vor meinen Kollegen wahren…
Vielen Dank für den Blog! Das hat mir nen haufen Arbeit und Zeit erspart
Gruß HK
Vielen Dank! Hat mir schon mal viel Sucherei erspart 🙂
Gibt es zufällig eine erweiterte Abfrage in dieser Kombination, welche die doppelten (in meinem Fall Artikelnummern) dann evtl. mit einem einmaligen Präfix versieht?
LG