[SQL] wie lösche ich doppelte datensätze raus?



  • gibt es da eine trickiy sql (querry|statment|befehl)?



  • wirklich löschen, oder im Select nur einmal ausgeben - DISTINCT?



  • entweder was flenders sagt..
    oder vorher abfangen, daß keine doppelten reinkommen (refresh durch umleitung abfangen etc..)



  • flenders schrieb:

    wirklich löschen, oder im Select nur einmal ausgeben - DISTINCT?

    löschen

    elise schrieb:

    vorher abfangen, daß keine doppelten reinkommen (refresh durch umleitung abfangen etc..)

    ist jetzt zu spät



  • kommt verdammt drauf an, wie die db gebaut ist..

    wenn es eine wäre, die sich so baut, daß datensätze beim eintragen ihre id gleich noch 'unsichtbar' zur weiterverwendung in andere tabellen reinwerfen, um joins zu ermöglichen, ist es nicht so einfach mit dem löschen...

    bei doppelt, dreifach oder mehrfach einträgen von gleichen beiträgen musst du (oder das kleine bereinigungsprogramm) immer wissen, welcher der beitrag ist, der sich aktuell mit den anderen tabellen kurzschließt (wahrscheinlich der letzt eingetragene). da stellt sich dann weiter die frage, ob .. wenn ich die anderen lösche, auch die abhängigkeiten gelöscht werden dürfen.

    nein, anders.. ich denke, du musst deine datenbank sehr gut kennen, im aufbau etc.. um datensätze löschen zu können.

    *klingt leicht chaotisch, aber ich hatte dieses problem schonmal, und sehe grade irgendwie gefahr...



  • vielleicht denke ich auch zu kompliziert.. vielleicht gibts keine extremen abhängigkeiten.

    eine klare möglichkeit ist das herstellen einer temporären tabelle mit distinct.

    damit elemeniert man die doppelten.





  • jup danke das ist es, noch was wie kriege ich es hin das er nur die doppelten raushollt
    die tabelle ist zu gross und mit LIMIT wird es recht umständlich



  • Was ist denn bei diesen Datensätzen doppelt? Evtl. kannst du sie so auslesen und anschließend ein einer Schleife durchgehen und den entsprechenden DELETE senden. Vielleicht kann man das auch direkt in einen SQL-Befehl schreiben, aber dazu fehlen mir im Augenblick die Kenntnisse.

    SELECT id FROM table GROUP BY id HAVING COUNT( id )  > 1
    


  • Ich verstehe jetzt auch , wie flenders , deine Frage nicht.
    Da musst du schon genaue beschreiben wie deine Tabelle aufgebaut ist.
    Wen du aber keine doppelten willst dann kann man den Table so verändern das er schon keine doppelten einfügt.
    Wäre die bessere Lösung.



  • So wie ich das verstanden habe, hat er eben schon doppelte Einträge drin, und will diese nun rauslöschen 🙄



  • *g* bei unseren Briefen, die wir von der Kreissparkasse erhalten, steht immer (sinngemäß) folgender Text drunter:

    Wir bitten zu entschuldigen, wenn Sie diesen Brief in mehrfacher Ausführung erhalten. Dies ist jedoch für uns kostengünstiger als einen Abgleich der Datenbank zu machen



  • Loggy@urlaub schrieb:

    *g* bei unseren Briefen, die wir von der Kreissparkasse erhalten, steht immer (sinngemäß) folgender Text drunter:

    Wir bitten zu entschuldigen, wenn Sie diesen Brief in mehrfacher Ausführung erhalten. Dies ist jedoch für uns kostengünstiger als einen Abgleich der Datenbank zu machen

    Geil 😮



  • Unix-Tom schrieb:

    Ich verstehe jetzt auch , wie flenders , deine Frage nicht.
    Da musst du schon genaue beschreiben wie deine Tabelle aufgebaut ist.
    Wen du aber keine doppelten willst dann kann man den Table so verändern das er schon keine doppelten einfügt.
    Wäre die bessere Lösung.

    ok 🙂

    mit

    SELECT post_id, word_id, title_match, COUNT(post_id), COUNT(word_id), COUNT(title_match) from phpbb_search_wordmatch GROUP BY post_id, word_id, title_match
    

    kann ich herausfinden welche datensätze doppelt sind in den ich mit die counts von post_id usw. ankucke, aber das sind 300000 datensätze und mich intersieren nur die desen COUNT(...) > 1 ist

    fürs erste wäre ich glücklich wenn ich mit SELECT nur die COUNT(...) > 1 krigen würde,



  • Das macht doch mein oben gepostetes Beispiel 😕


Anmelden zum Antworten