Einzelnen Beitrag anzeigen

mjenke

Registriert seit: 28. Mär 2003
Ort: Bonn
131 Beiträge
 
#1

Abfrage über mehrere Tabellen...

  Alt 4. Jun 2004, 09:32
Guten Morgen, alle miteinander!

Nehmen wir mal an, ich hätte eine Paradox7-Datenbank, die ich mit einer Delphi4-Applikation anspreche. Nehmen wir weiter an, in dieser Datenbank gäbe es drei Tabellen:

- tfilm
- tcastcrew
- tdarsteller

Aufbau:

tfilm
-----
Id - Integer
Titel - Alpha (50)

tcastcrew
---------
Id - Integer
Nachname - Alpha (50)
Vorname - Alpha (50)

tdarsteller
-----------
Id - Integer
IdFilm - Integer
IdCast - Integer

Die Tabellen tfilm und tcastcrew beinhalten textliche Informationen, während die Tabelle tdarsteller als Verknüpfungstabelle zwischen den beiden dient.

Mit

SQL-Code:
SELECT DISTINCT t1.Id, t1.Titel FROM
tfilm t1
LEFT JOIN tdarsteller t2 ON t1.Id = t2.IdFilm
LEFT JOIN tcastcrew t3 ON t3.Id = t2.IdCast
WHERE t3.Vorname + " " + t3.Nachname LIKE "%Harrison Ford%"
ORDER BY Titel
beispielsweise könnte ich aus dieser Datenbank alle Filmtitel heraussuchen, zu denen "Harrison Ford" als Darsteller eingetragen ist.

Jetzt zu meiner eigentlichen Frage: Kann mir jemand auf die Sprünge helfen, wie ich die Abfrage zu formulieren habe, wenn ich mehrere Schauspieler angeben möchte und will, dass sie ALLE in diesem Film mitspielen? Also beispielsweise, dass ich alle Filme heraussuchen möchte, in denen "Harrison Ford" UND "Mark Hamill" mitspielen?

Mit

SQL-Code:
SELECT DISTINCT t1.Id, t1.Titel FROM
tfilm t1
LEFT JOIN tdarsteller t2 ON t1.Id = t2.IdFilm
LEFT JOIN tcastcrew t3 ON t3.Id = t2.IdCast
WHERE
    t3.Vorname + " " + t3.Nachname LIKE "%Harrison Ford%"
AND t3.Vorname + " " + t3.Nachname LIKE "%Mark Hamill%"
ORDER BY TITEL
funktioniert es nicht, da die Tabelle tdarsteller ja jeweils EINE Verbindung zwischen tfilm und tcastcrew herstellt. Ich müsste aber ja ALLE Verbindungen überprüfen. Zwar liesse sich so etwas programmtechnisch erschlagen, aber den Aufwand möchte ich nicht treiben (macht schliesslich auch alles wieder ein wenig langsamer). Ich würde es gerne mit einer Query schaffen, allerdings reichen meine SQL-Kenntnisse dafür nicht aus...


Matthias
Matthias Jenke
  Mit Zitat antworten Zitat