MSSQL Dubletten finden
-
Hi,
gibt es eigentlich eine Möglichkeit, in einer SQL Datenbank per Query Dubletten zu suchen? Also bis auf den Autoinkrement identische Datensätze...
-
Ich weiß jetzt von keiner automatischen Sache, aber ein solches Query zu basteln sollte ja nicht allzu schwer sein.
Die Holpersteine kommen ja dann erst: Musterstraße vs. Musterstr vs. Musterstr. vs. Muster Straße etc.
Was du da als Dublette ansiehst musst du dann ja ohnehin erst vorher definieren.
MfG SideWinder
-
Ansonsten hilft selbstverständlich http://www.lmgtfy.com/?q=mssql+find+duplicates
MfG SideWinder
-
SideWinder schrieb:
Die Holpersteine kommen ja dann erst: Musterstraße vs. Musterstr vs. Musterstr. vs. Muster Straße etc.
Dafür ist Google Refine extrem praktisch.
-
SELECT feld1, feld2, feld3 FROM ... GROUP BY feld1, feld2, feld3 HAVING COUNT(*) > 1
-
Das sieht schon ganz gut aus.
Jetzt hab ich allerdings einige Spalten, die da rein sollen. Gibt es einen Weg, dass ich die nicht sowohl in die SELECT als auch in die GROUP BY Anweisung schreiben muss? Im Prinzip handelt es sich um alle Spalten bis auf eine...
Und dann ist da ja noch: durch GROUP BY bekomme ich ja nur den Eintrag, eigentlich möchte ich ja alle IDs (die Spalte, die nicht überprüft wird) der Einträge haben, damit ich sie dann löschen kann.
-
Heimelchen schrieb:
Das sieht schon ganz gut aus.
Jetzt hab ich allerdings einige Spalten, die da rein sollen. Gibt es einen Weg, dass ich die nicht sowohl in die SELECT als auch in die GROUP BY Anweisung schreiben muss?Hmmm...
Und dann ist da ja noch: durch GROUP BY bekomme ich ja nur den Eintrag, eigentlich möchte ich ja alle IDs (die Spalte, die nicht überprüft wird) der Einträge haben, damit ich sie dann löschen kann.
Na dann musst du mit dem Ergebnis nochmal nen JOIN auf die selbe Tabelle machen
SELECT row_id_feld FROM tabelle t1 INNER JOIN ( SELECT feld1, feld2, feld3 FROM tabelle GROUP BY feld1, feld2, feld3 HAVING COUNT(*) > 1 ) AS t2 ON t1.feld1 = t2.feld1 AND t1.feld2 = t2.feld2 AND t1.feld3 = t2.feld3
Und vermutlich könnte man auch was mit den Partitioning/Ranking Funktionen basteln, also
ROW_NUMBER() OVER (...)
,NTILE() OVER(...)
etc.
Wird allerdings vermutlich auch nicht gehen wenn du die Feldliste nur 1x bzw. gar nicht schreiben willst.
-
Jetzt hab ich's. Auf die Idee war ich ganz am Anfang schon gekommen, hab aber keinen fehlerfreien Query hingekriegt, weil ich das AS beim INNER JOIN vergessen hab. So is super!