dedlfix: Löschen von Einträge die nicht gleich sind

Beitrag lesen

Tach!

kann ich direkt in einer MySQL Tabelle folgendes ausführen?

  1. Gehe in Tabelle 1 und hole dir nach und nach alle Datensätze
  2. Gehe in Tabelle 2 und schau ob dieser Datensatz dort existiert
  3. Wenn nein lösch diesen Datensatz aus Tabelle 1
  4. Wenn ja mach nichts und gehe zum nächsten.

Liest sich nach einem Ablauf und einen solchen könnte man als Stored Procedure ins DBMS schreiben oder auch in der Anwendung ausführen.

Andererseits muss man das bei dieser Aufgabenstellung nicht, denn man kann es auch als Statement formulieren.

Zum Testen am besten erstmal SELECT statt DELETE nehmen. Für Schritt 1 reicht ein einfaches Statement SELECT * FROM t1. Für Schritt 2 kann man eine Subquery mit NOT EXISTS hinzufügen.

SELECT * FROM t1 WHERE NOT EXISTS (SELECT * FROM t2 WHERE t1.id = t2.id)

Das war es im Grunde schon. Schritt 4 braucht es bei diesem mengenorientierten Ansatz nicht. Wenn die Query die gesuchten Datensaätze ergibt, kannst du sie in ein DELETE-Statement umformulieren. Vielleicht wirst du noch das Vergleichskriterium anpassen müssen, wenn sich die Datensätze in deinem Fall nicht anhand der ID als gleich erkennen lassen. Bedenke dabei, das gelöschte IDs aus t1 wiedervergeben worden sein könnten, der Datensatz aber ansonsten nicht mehr dem von t2 entspricht.

dedlfix.