Mit INNER JOIN gleiche Tabelle 2 mal Abfragen

Hallo Zusammen,

Ich versuche eine Tabelle Mehrfach einzubinden mittels INNER JOIN

hier mal meine Tabellen

tblStrecke
ID (Autowert), Start\_FK (Zahl), Ziel\_FK(Zahl)

tblStaedte
ID (Autowert), Stadtcode (String), Stadtname(String)

tblFahrplan
ID (autowert), StartZeit (DateTime), Strecke\_FK, Fahrername (Zahl), ... bla bla...

tblFahrplan.Strecke_FK hat eine n:1 Verknüpfung mit tblStrecke
tblStrecke.Start_FK und tblStrecke.Ziel_FK hat jeweils eine n:1 Beziehung mit tblStaedte

nun versuch ich eine Abfrage zu basteln die Start und Ziel im Klartext abbildet, aber ich komme auf keinen grünen Zweig…

Meiner Theorie nach könnte das so aussehen:

SELECT tblFahrplan.Startzeit, tblStaedte.Name AS Start, tblStaedte.Name AS Ziel
FROM tblFahrplan 
INNER JOIN tblStrecke ON tblStreckeID = tblFahrplan.Strecke\_FK 
INNER JOIN tblStaedte ON tblStaedte.ID = 
tblStrecke.Start\_FK 
INNER JOIN tblStaedte ON tblStaedte.ID = tblStrecke.Ziel\_FK;

aber das funktioniert einfach nicht, erhalte immer eine Fehlermeldung!

Ich hoffe mir kann hier jemand helfen

vielen Dank

Enrico

Hallo,
würdest du dir selber helfen können wenn du deinen Text liest?

  1. ist die Angabe der Datenbank wichtig
  2. hilft es keinem zu wissen, dass es eine Fehlermeldung gibt, ohne den Inhalt dergleichen zu kennen

und

  1. zu deinem Problem:
    es geht natürlich einen Join auf die gleiche Tabelle zu machen, nur muss der Query-Optimizer die dann auch auseinander halten können.

Daher kann man in SQL jeder Tabelle einen Alias-Namen mitgeben.
Etwa so:

INNER JOIN tblStrecke as tbl1 ON tbl1.tblStreckeID = tblFahrplan.Strecke\_FK 

Das „AS“ kann man je nach Datenbank auch weglassen.

Gruss
Joey

Hallo Joey,

zu 1.
es handelt sich um eine Access97 Datenbank.
zu 2.
Die Fehlermeldungen reichen von Syntaxfehlern bis „nicht unterstüzter Verknüpfungstyp“, je nach Klammerung. Ich bin mir aber sicher das es geht, hatte ein ähnliches Problem schon einmal bei einer anderen AccessDB und hab das irgendwie hinbekommen, leider find ich diese Fahnenflüchtige Datenbank nicht mehr wieder, sonst könnte ich mich daran orientieren.

Gruß Enrico

Hallo,

SELECT tblFahrplan.Startzeit, tblStaedte.[Name] AS Start,tblStaedte.[Name] AS Ziel
FROM tblFahrplan
INNER JOIN tblStrecke ON tblStrecke.ID = tblFahrplan.Strecke_FK
INNER JOIN tblStaedte ON tblStaedte.ID = tblStrecke.Start_FK
INNER JOIN tblStaedte ON tblStaedte.ID = tblStrecke.Ziel_FK;

Gruß
Franz, DF6GL

Hallo Franz,

vielen vielen Dank. Hat zwar nicht funtioniert(Fehler war „Syntax Fehler (fehlender Operator) in Abfrageausdruck…“) , hat mich aber auf die richtige Lösung gebracht.
hab das umgebaut auf Left Join und alles geklammert.

SELECT tblFahrplan.Startzeit, tblStaedte.[Name] AS Start,tblStaedte.[Name] AS Ziel
FROM tblFahrplan
INNER JOIN tblStrecke ON tblStrecke.ID = tblFahrplan.Strecke_FK
INNER JOIN tblStaedte ON tblStaedte.ID = tblStrecke.Start_FK
INNER JOIN tblStaedte ON tblStaedte.ID = tblStrecke.Ziel_FK;

in

SELECT tblFahrplan.[Startzeit], tblStaedte.[Name] AS Start,tblStaedte.[Name] AS [Ziel]
FROM ((tblFahrplan
INNER JOIN tblStrecke AS ST ON ST.[ID] = tblFahrplan.Strecke\_FK)
LEFT JOIN tblStaedte AS [STS] ON STS.[ID] = ST.[Start\_FK])
LEFT JOIN tblStaedte AS [STZ] ON STZ.[ID] = ST.[Ziel\_FK];

vielen Dank für die Hilfe

Enrico