[solved] Doppelte Einträge in MySQL löschen



  • Hallo zusammen,
    ich benutze MySQL und habe eine Tabelle mit folgender Strunktur:
    `ID, Name, destination

    1, Peter, New York

    5, Bernd, Berlin

    10 Bernd, Paris

    25 Peter, New York

    29 Bernd, Paris

    34 Peter, RomDie ID ist für jeden Datensatz anders und wiederholt sich nicht. Die Einträge, bei denen Name und destination doppelt vorkommen, sollen nun gelöscht werden, sodass nur nochId, Name, destination

    1, Peter, New York

    5, Bernd, Berlin

    10 Bernd, Paris

    34 Peter, Rom`
    in der Datenbank steht.
    Ich weiß, dass ich mit

    Select distinct Name,destination from tabelle
    

    die Einträge herausfiltern kann, die ich am Ende haben möchte. Wie kann ich aber nun die, die nicht in dieser Tabelle stehen, löschen?
    Dazu benötige ich doch die ID, aber wie kann ich mir die ID von den herausgefilterten Datensätzen anzeigen lassen?
    wenn ich

    Select distinct ID,Name,destination from tabelle
    

    eingebe, bekomme ich wieder alle Daten, da ID ja nicht doppelt vorkommt, alles andere aber schon.

    Ich habe mich an diesem Beispiel (in einem anderem Forum gefunden) orientiert:

    DELETE
    FROM
     tabelle
    WHERE
     (
     tabelle_id NOT IN
      (
      SELECT
       Temp.tabelle_id
      FROM
       (
       SELECT DISTINT
        tabelle_id,
        tabelle_beispieldatenfeld       -- das Dublettenkritium, können auch mehrere sein
       FROM
        tabelle
       ) Temp
      )
     )
    

    aber dazu brauche ich ja irgendwie die ID 😕 😕 😕



  • Du solltest einen Index setzen dann gibt es sowas auch nicht.

    Löschen: Mit einen Statement geht sowas nicht.



  • Ein anderer Ansatz wäre eine neue Tabelle anzulegen und diese mit den Distinct zu befüllen. Also

    INSERT INTO neu SELECT DISTINCT name,dest FROM alt
    

    Dann die alte weghauen und die neue umbenennen.
    Und wie Unix-Tom schon sagte

    CREATE UNIQUE INDEX ON neu (name,dest )
    


  • SELECT id FROM tabelle GROUP BY Name, Destination
    


  • MySQLer schrieb:

    SELECT id FROM tabelle GROUP BY Name, Destination
    

    Versteh grad nicht, was das bringen soll?!?



  • Ich habe versucht mit meinem Post die einzige Frage die ich im Thread von abby erkennen konnte zu beantworten. Ich weiß dass das hier im Forum unüblich ist, aber ich bin gern rebellisch und widersetze mich den unverständlichen Foreneigenheiten, bei denen man alles beantwortet, aber niemals nicht die gestellte Frage!

    Achso, hier die Frage:

    abby schrieb:

    Dazu benötige ich doch die ID, aber wie kann ich mir die ID von den herausgefilterten Datensätzen anzeigen lassen?

    So nun noch die Erklärung:
    Das Statement zieht die ID aller Datensätze die sich in Bezug auf "Name" und "Destination" doppeln, oder allgemein > 1x vorkommen.

    abby schrieb:

    da ID ja nicht doppelt vorkommt, alles andere aber schon.

    Ich hoffe ausreichend und verständlich geantwortet zu haben 🙄 ...

    LG



  • MySQLer schrieb:

    Achso, hier die Frage:

    abby schrieb:

    Dazu benötige ich doch die ID, aber wie kann ich mir die ID von den herausgefilterten Datensätzen anzeigen lassen?

    So nun noch die Erklärung:
    Das Statement zieht die ID aller Datensätze die sich in Bezug auf "Name" und "Destination" doppeln, oder allgemein > 1x vorkommen.

    Ja, ich muss dir Recht geben, das war genau das, was ich gebraucht hab 🙂
    Eigentlich ja total simpel, aber ich bin einfach nicht drauf gekommen...

    Vielen Dank 😃


Anmelden zum Antworten