SQL: Datensätze mit Bezug zu einer anderen Tabelle löschen

Aus DBWiki
Wechseln zu: Navigation, Suche

Zurück zur Übersicht



In einem IN- bzw. NOT IN-Ausdruck lassen sich in einer Unterabfrage die entsprechenden Datensätze ermitteln.

Wir simulieren eine fiktive Tabelle qualitaetsvorfall, die wir mittels Vereinigungsabfrage unter Zuhilfenahme der Tabelle dual anlegen.

SELECT 10 AS abt_nr, #2017-02-18# AS aufgetreten FROM dual
UNION  ALL
SELECT 30, #2017-03-22# FROM dual
UNION  ALL
SELECT 20, #2017-04-17# FROM dual
UNION  ALL
SELECT 10, #2017-07-14# FROM dual
UNION  ALL
SELECT 20, #2017-09-07# FROM dual
UNION  ALL
SELECT 10, #2017-11-11# FROM dual
abt_nr aufgetreten
10 18.02.2017
30 22.03.2017
20 17.04.2017
10 14.07.2017
20 07.09.2017
10 11.11.2017


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


Aufgabe soll es sein, alle Mitarbeiter der Abteilung zu löschen, bei der 3 oder mehr Qualitätsvorfälle gemeldet wurden. Als Vorbereitung muss noch die referentielle Integrität zwischen ma_nr und mgr in der Tabelle mitarbeiter gelöscht werden, was mit dieser Abfrage zu erreichen ist:

ALTER TABLE mitarbeiter
DROP  CONSTRAINT fk_mgr
DELETE
FROM   mitarbeiter AS m
WHERE  abt_nr IN ( SELECT abt_nr
                   FROM   qualitaetsvorfall
                   GROUP  BY abt_nr
                   HAVING Count(*) >= 3 )

Nach dem Ausführen der Löschabfrage verweilen noch folgende Mitarbeiter in der Tabelle:

ma_nr ma_name abt_nr
7369 Schmidt 20
7499 Allard 30
7521 Wecker 30
7566 Johann 20
7654 Mertens 30
7698 Blank 30
7788 Scheidt 20
7844 Dreher 30
7876 Adam 20
7900 Jakobs 30
7902 Fuhrmann 20



Zurück zur Übersicht