Announcement

Collapse
No announcement yet.

Datensätze mit gleicher Kennung löschen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datensätze mit gleicher Kennung löschen

    Hallo Spezialisten!<BR>
    Mit:
    <B>SELECT id FROM tabelle GROUP BY id HAVING Count(*) > 1</B>
    <BR>
    kann ich in einer Query mir alle Datensäte zeigenlassen, die 'doppelt' vorhanden sind.<BR>
    Wie funktioniert der DELETE-Befehl, um die 'doppelten' Datensätze zu löschen?<BR>
    <B>DELETE FROM tabelle WHERE ..... ????</B>
    <BR>
    Ein Datensatz soll aber erhalten bleiben!<BR>
    <BR>
    Gruß Gunnar

  • #2
    Hi Gunnar,

    such mal hier im Forum nach "Doppelte Datensätze", das Thema wurde nämlich schon mehrfach behandelt.

    Gruß Fal
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Hi Falk,<BR>
      hab ich alles schon durchgekämmt, aber nicht die Lösung gefunden.<BR>
      Allerdings stellt sich das Problem schon wieder etwas anders dar:
      Das Doppelt-Kriterium muß über meherere Felder ermittelt werden.<BR>
      Dadurch heißt die Abfrage: <B>SELECT wert1,wert2 FROM tabelle GROUP BY wert1, wert2 HAVING Count(*) > 1</B>
      <BR>
      und jetzt kommt der Haken: da Select mit mehr als einem Wert arbeitet,<BR>
      läuft die Delete-Sequence nicht, da dort eine eindeutige Zuweisung erwartet wird.<BR>
      Und genau da liegt der Hase im Pfeffer!
      <BR>
      Gunna

      Comment


      • #4
        Einfach mal so, ohne es ausprobiert zu haben.

        <pre>delete from tabelle where id in
        (select id from tabelle where wert1||','||wert2 in
        (select wert1||','||wert2 FROM tabelle
        GROUP BY wert1, wert2 HAVING Count(*) > 1))
        </pre>

        Könnte aber langsam sein

        Comment


        • #5
          Hallo Gunnar,

          wenn die Datensätze exakt gleich sind, d.h sie unterscheiden sich nicht einmal in der id, dann hast du eigentlich keine Chance den Delete in einem Rutsch abzusetzen, da du nicht festlegen kannst welcher Datensatz gelöscht weren soll und welcher nicht.
          Genaugenommen brauchst du zwei eindeutige Kriterien, einen um festzulegen welches identische Datensätze sind und einen um die löschbaren von den nichtlöschbaren zu unterscheiden. Mit einem eindeutigen Schlüssel könnte aber auch sowas gehen:<pre>
          delete from ATable A
          where A.Key in (
          select B.Key from ATable B, ATable C
          where B.Feld1 = C.Feld1 and B.Feld2 = C.Feld2 ...
          and B.Key < C.Key)</pre>
          Danach sollte nur noch der identische Datensatz mit dem größten Wert in Key übrigbleiben.

          Sicherheitshalber vorher mit einem Update statt Delete ausprobieren ;-)

          Gruß Fal
          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

          Comment


          • #6
            Danke für die Tips.<BR>
            Um den ganzen Ärger zu vermeiden habe ich den DB-Schüssel jetzt so eingerichtet,<BR>
            daß doppelte Datensätze gar nicht erst eingegeben werden können.
            <BR&gt

            Comment


            • #7
              Man könnte noch anmerken, daß eine Tabelle in der ein Satz nicht eindeutig zu identifizieren ist, keiner relationalen Theorie genügt und daher eher ein Datengrab, denn eine Datenbank ist ;-

              Comment

              Working...
              X