SQL: Komplettes Überschneiden von Daten ermitteln

Aus DBWiki
Wechseln zu: Navigation, Suche

Zurück zur Übersicht



Es soll die gemeinsame Schnittmenge über Teilmengen ermittelt werden.


Bezogen auf die Tabelle seminar soll ermittelt werden, welche Kombination von sem_nr und stufe von allen Mitarbeitern besucht wurde. Das ist dann der Fall, wenn die Anzahl der Kombination aus sem_nr und stufe gleich der Anzahl der Mitarbeiter ist, für die Daten vorliegen.

Lösung für Jet-SQL

Hinweis für Access-Anwender

Um die folgenden Abfragen selbst testen zu können, müssen die Tabellen der Übungsdatenbank vorhanden sein.

SELECT sem_nr,
       stufe
FROM   seminar
GROUP  BY sem_nr, stufe
HAVING count( * ) = ( SELECT count ( * )
                      FROM   ( SELECT DISTINCT ma_nr
                               FROM   seminar ) )

Allgemeine Lösung

SELECT sem_nr,
       stufe
FROM   seminar
GROUP  BY sem_nr, stufe
HAVING COUNT( * ) = ( SELECT COUNT ( DISTINCT ma_nr )
                      FROM   seminar )

Lösung mittels INTERSECT-Klausel

SELECT sem_nr,
       stufe
FROM   seminar
WHERE  ma_nr = 7499
INTERSECT
SELECT sem_nr,
       stufe
FROM   seminar
WHERE  ma_nr = 7521
INTERSECT
SELECT sem_nr,
       stufe
FROM   seminar
WHERE  ma_nr = 7654

Hier ist ein entsprechender DBFiddle.

sem_nr stufe
SALA101 2



Zurück zur Übersicht