[ms access 03] "Doppeltes" Inner Join Statement

A

antihero

Hi

Ich arbeite gerade an einer mittelgrossen MS-Access Datenbank. Der Teil den ich anpassenn soll besteht im wesentlichen aus drei Tabellen. Kursteilnehmer, Teilnehmerberater, Geschlecht. Sowohl Teilnehmer als auch Teilnehmerberater haben eine Spalte "GeschlechtID", welche auf die Tabelle "Geschlecht" referiert, d.h. den Bezug zum Geschlecht "Mann" und "Frau" darstellt.

In einer SQL Abfrage möchte ich nun folgende Daten abfragen:

Kursteilnehmername
Kursteilnehmergeschlecht

Einfach. Mit dem folgenden Query passiert dies einwandfrei:

Code:
SELECT tblTeilnehmer.Name, tblGeschlecht.Geschlecht
FROM tblTeilnehmer INNER JOIN tblGeschlecht ON tblTeilnehmer.GeschlechtID=tblGeschlecht.GeschlechtID;

Numm möchte ich jedoch zusätzlich zu den Kursteilnehmer-Daten noch die Teilnehmerberater-Daten abfragen.


Kursteilnehmername
Kursteilnehmergeschlecht
Teilnehmerberatername
Teilnehmerberatergeschlecht

Folgende Abfrage bekommt die Daten aus beiden Tabellen.

Code:
SELECT tblTeilnehmer.Name AS Teilnehmer_Name, tblRAVBerater.Name as Berater_Name
FROM tblTeilnehmer INNER JOIN tblRAVBerater ON tblTeilnehmer.RAVBeraterID=tblRAVBerater.RAVBeraterID;


Und nun müsste da noch ein Teil rein, welcher sowohl der Berater.GeschlechtID als auch der Teilnehmer.GeschlechtID die passende Geschlechtsbezeichnung zuweist.

Ich hoffe ich habe mich einigermassen verständlich ausgedrückt.
Vielen Dank schonmal im Voraus für jede Hilfe!

Gruss antihero
 
hi,
versuche mal folgende idee:
Code:
  SELECT t.name, g.bezeichnung,tmp.name, tmp.beratergeschlecht as teilnehmergeschlecht
  FROM teilnehmer as t inner join geschlecht as g
    on t.geschlechtID = g.id
 inner join (select b.id,b.name, g.bezeichnung as beratergeschlecht from berater as b inner join geschlecht as g on b.geschlechtID = g.id) as tmp
    on t.beraterID = tmp.id
das statement ist in mysql4 getestet. kann also sein, dass du syntaxproblemem bekommst. das prinzip mit den 3 joins funktioniert aber.
 
Danke dir für deine Hilfe.
Ich habe den Code mal um meine Bezeichnungen erweitert und habe folgendes Resultat erhalten:

Code:
SELECT t.Name, g.Geschlecht, tmp.Name, tmp.GeschlechtID AS teilnehmergeschlecht
  FROM tblTeilnehmer AS  t inner join tblGeschlecht AS g ON  t.GeschlechtID = g.id INNER JOIN (SELECT tblRAVBerater.RAVBeraterID,tblRAVBerater.Name, tblGeschlecht.Geschlecht AS beratergeschlecht FROM tblRAVBerater AS b INNER JOIN tblGeschlecht AS g ON b.GeschlechtID = g.GeschlechtID) AS tmp
    ON t.RAVBeraterID = tmp.GeschlechtID;
Beim speichern meldet Access einen Syntaxfehler (fehlender Operator) in folgendem Abschnitt:
Code:
 t.GeschlechtID = g.id INNER JOIN (SELECT tblRAVBerater.RAVBeraterID,tblRAVBerater.Name, tblGeschlecht.Geschlecht AS beratergeschlecht FROM tblRAVBerater AS b INNER JOIN tblGeschlecht AS g ON b.GeschlechtID = g.GeschlechtID) AS tmp
    ON t.RAVBeraterID =

Hmm...
Kleine Frage am Rande. Führen die "tblTeilnehmer AS t" dazu, dass man die Bezeichnung "t" im ganzen QUery verwenden kann?

Wie gesagt, vielen Dank schonmal für deine Hilfe, wäre nett wenn du mir beim neuerlichen Problem nochmal auf die Sprünge helfen könntest!

Gruss antihero
 
Manchmal macht Tutorials.de einfach ein bisschen faul. :)

Ich hab das Query nun selber hinbekommen. Folgendermassen könnte das Aussehen:

Code:
SELECT T.Name, 
G.Geschlecht AS teilnehmergeschlecht, 
B.Name, 
tmp.Geschlecht AS Beratergeschlecht

FROM (tblTeilnehmer AS T INNER JOIN tblGeschlecht AS G ON T.GeschlechtID=G.GeschlechtID) 
INNER JOIN (tblRAVBerater AS B INNER JOIN tblGeschlecht AS tmp ON B.GeschlechtID = tmp.GeschlechtID) ON T.RAVBeraterID = B.RAVBeraterID;

Grundwissen, welches mir wahrscheinlich vorher fehlte, findet sich hier.
 
Zurück