SQL: Löschen von Datensätzen, die in einer anderen Tabelle nicht vorhanden sind

Aus DBWiki
Wechseln zu: Navigation, Suche

Zurück zur Übersicht



Liegen z. B. Daten vor, die die Regeln der referentiellen Integrität verletzten, ist es manchmal notwendig, diese Daten herauszufinden und zu löschen.


Hinweis für Access-Anwender
Um die folgenden Abfragen selbst testen zu können, müssen die Tabellen der Übungsdatenbank vorhanden sein.


Angenommen, unsere Mitarbeitertabelle enthält einen Datensatz eines Mitarbeiters, der in abt_nr einen Wert aufweist, der nicht in der Abteilungstabelle vorhanden ist. Mit der Anweisung NOT EXISTS und einer Unterabfrage kann die Gültigkeit von abt_nr überprüft werden.

DELETE
FROM   mitarbeiter m
WHERE  NOT EXISTS( SELECT NULL
                   FROM   abteilung
                   WHERE  abt_nr = m.abt_nr )

Alternativ (aber vermutlich langsamer) geht auch:

DELETE
FROM   mitarbeiter
WHERE  abt_nr NOT IN( SELECT abt_nr
                      FROM   abteilung )



Zurück zur Übersicht