SQL: Werte aus einer Tabelle abrufen, die in einer anderen Tabelle nicht existieren

Aus DBWiki
Wechseln zu: Navigation, Suche

Zurück zur Übersicht



Für diese Problematik ist es besonders nützlich, Funktionen zu haben, die eine Mengendifferenz durchführen können. In vielen SQL-Dialekten kann hierzu der EXCEPT-Operator (in Oracle heißt er MINUS) verwendet werden.

Unter Access bietet sich hierfür der Abfrageassistent zur Inkonsistenzsuche an, der einen LEFT JOIN verwendet, und das verknüpfte Feld auf Null prüft.

Allgemeine Lösung

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


Soll ermittelt werden, für welche Abteilung keine Mitarbeiterdaten vorliegen, kann man diese Abfrage einsetzen:

SELECT a.abt_nr
FROM   abteilung AS a
       LEFT JOIN mitarbeiter AS m
              ON a.abt_nr = m.abt_nr
WHERE  m.abt_nr IS NULL

Auch diese, wenn auch vermutlich etwas langsamere Form ist möglich:

SELECT abt_nr
FROM   abteilung
WHERE  abt_nr NOT IN ( SELECT abt_nr
                       FROM   mitarbeiter )
Wiki hinweis.png

Anmerkung: Hier ist darauf zu achten, dass NOT IN keine Null-Werte berücksichtigt.


Statt der zweiten Form sollte man deshalb besser auf diese Abfrageform setzen:

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

Das Reultat aller Abfragen lautet:

abt_nr
40



Zurück zur Übersicht