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!
Hallo,
würdest du dir selber helfen können wenn du deinen Text liest?
ist die Angabe der Datenbank wichtig
hilft es keinem zu wissen, dass es eine Fehlermeldung gibt, ohne den Inhalt dergleichen zu kennen
und
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.
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.
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;
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];