![]() |
Datenbank: Access • Version: XP • Zugriff über: ADO
SQL-Abfrage mit Ausschluss von Daten aus n:m Bezeihung
Hallo Leute,
ich habe ein kleines Filmlexikon geschrieben, welches auf eine Access-DB zugreift. Die DB enthält unter anderem zwei Tabellen. Tabelle 1: FILM; Felder: FilmID (Primärschlüssel), Titel, Dauer, Filmtyp,... Tabelle 2: DARSTELLER; Felder: DarstellerID (Primärschlüssel), Name, Vorname,... Diese n:m Beziehung löste ich mit einer dritten Tabelle FILM_DARSTELLER mit den Feldern FilmID (Primärschlüssel) und DarstellerID (Primärschlüssel) auf. Das alles klappt prima. Um auch geziehlt suchen zu können, besitzt das Programm eine Abfrage-Form. Dabei stieß ich allerdings auf ein Problem. Es ist ja kein Hexenwerk alle Filme mit Schauspieler A oder B zu finden. Was aber, wenn man davon nur die Filme haben will, in denen Schauspieler C und D nicht mitspielen? Das funktioniert jedenfalls nicht:
SQL-Code:
Stehe ich völlig auf dem Schlauch oder gibt es für dieses Problem keine reine SQL-Lösung?
SELECT FILM.Titel
FROM FILM INNER JOIN FILM_DARSTELLER ON (FILM.FilmID = FILM_DARSTELLER.FilmID) WHERE ((FILM_DARSTELLER.DarstellerID=1) OR (FILM_DARSTELLER.DarstellerID=2)) AND (FILM_DARSTELLER.DarstellerID<>3) AND (FILM_DARSTELLER.DarstellerID<>4); Gruß e-gon |
Re: SQL-Abfrage mit Ausschluss von Daten aus n:m Bezeihung
Versuch es mal mit
SQL-Code:
...and not exists ( <Abfrage>);
|
Re: SQL-Abfrage mit Ausschluss von Daten aus n:m Bezeihung
Eventuell kommst du mit
SQL-Code:
hin.
Befehl1
UNION MINUS Befehl2 Befehl1 sind alle Filme, in denen A und B mitspielen. Befehl2 alle, mit C und/oder D. |
Re: SQL-Abfrage mit Ausschluss von Daten aus n:m Bezeihung
SQL-Code:
select Titel
from FILM where FilmID in (select FilmID from FILM_DARSTELLER where DarstellerID = 1 or DarstellerID = 2) and FilmID not in (select FilmID from FILM_DARSTELLER where DarstellerID = 3 or DarstellerID = 4) |
Re: SQL-Abfrage mit Ausschluss von Daten aus n:m Bezeihung
Vielen Dank für die vielen, schnellen Antworten.
@mkinzler: Es hat zwar etwas gedauert bis ich es begriffen hatte doch werde ich es wohl so machen. @schlecki: UNION MINUS wäre zwar perfekt für meine Anforderungen gewesen, doch leider scheint mein MS Access XP das "MINUS" nicht zu kennen. @Stevie: Ist das etwa so ähnlich wie "not exist ()"? Gruß e-gon |
Re: SQL-Abfrage mit Ausschluss von Daten aus n:m Bezeihung
Zitat:
exists testet, ob die Unterabfrage mind eine Zeile zurückliefert, wohingegen in überprüft, ob der angegebene Wert in dem Ergebnis der Unterabfrage enthalten ist. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz