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!


Anmelden zum Antworten