Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [SQL] Inner Join Anweisung?! (https://www.delphipraxis.net/122920-%5Bsql%5D-inner-join-anweisung.html)

Yheeky 24. Okt 2008 09:33


[SQL] Inner Join Anweisung?!
 
Hi,

ich habe ein Problem bei einer INNER JOIN SQL-Anweisung. Ich habe 3 Tabellen und möchte aus einer Tabelle die Daten aus drei Tabellen ausgeben. Wie kann ich das machen?

Hier meine Tabellen:

Tabelle Teams:
Code:
TeamID   Team
1        ABC
2        CDE
3        FGH

Tabelle Liga:
LigaID   Liga
1        A-Liga
2        B-Liga
3        C-Liga

Tabelle Spiele:
SpielID   LigaID HeimTeamID   AuswaertsTeamID
1         1      1            2
2         1      2            3
3         1      3            1
Die Ausgabe soll anhand der Tabelle Spiele erfolgen und soll im ersten Fall z.B. so aussehen:
Delphi-Quellcode:
1   A-Liga   ABC   CDE
Kann mir jemand bei der SQL-Anweisung helfen?

nachti1505 24. Okt 2008 09:51

Re: [SQL] Inner Join Anweisung?!
 
SQL-Code:
SELECT spielid,
            (SELECT liga FROM liga WHERE ligaID = s.ligaID),
            (SELECT team FROM team WHERE teamid = s.heimteamID),
            (SELECT team FROM team WHERE teamid = s.auswaertsteamID)
FROM spiele s

mashutu 24. Okt 2008 09:56

Re: [SQL] Inner Join Anweisung?!
 
Delphi-Quellcode:
select a.SpielId, pb.Liga,c.Team Heim,d.Team Gast from spiele a,Liga b,Teams c,Teams d where b.LigaId=a.LigaId and c.TeamID=a.HeimTeamId and d.TeamID=a.AuswTeamId

Yheeky 24. Okt 2008 10:08

Re: [SQL] Inner Join Anweisung?!
 
Benötigt man da keine INNER JOIN?!
Okay, es funktioniert, aber ist das die "eleganteste" Lösung?

Nachtrag: Ich benötige eine variable Eingabe von der SpielID, d.h. das muss ich doch irgendwie in die Abfrage mit einbauen, oder?

DeddyH 24. Okt 2008 10:19

Re: [SQL] Inner Join Anweisung?!
 
Das Statement von mashutu ist ein INNER JOIN ;)

NormanNG 24. Okt 2008 10:20

Re: [SQL] Inner Join Anweisung?!
 
Hi,

versuchs mal so:
SQL-Code:
select s.SpielID, l.Liga, th.Team, ta.Team

from Spiele s
join Liga l on l.LigaID = s.LigaID
join Team th on th.TeamID = s.HeimTeamID
join Team ta on ta.TeamID = s.AuswaertsTeamID
where s.SpielID = :SpielID
SpielID wird dann als Parameter z.B. in einer TQuery gesetzt...


Edit:
Zitat:

Das Statement von mashutu ist ein INNER JOIN
Stimmt, hab ich aber wegen der Delphi-Tags auch nicht sofort gesehen :drunken:

Yheeky 24. Okt 2008 10:39

Re: [SQL] Inner Join Anweisung?!
 
Danke, NormanNG...das funktioniert! :-)

Warum ist das von mashutu ein INNER JOIN? Ich dachte da bräuchte man so Statements wie INNER, OUTER, LEFT/RIGHT JOIN?

mkinzler 24. Okt 2008 11:21

Re: [SQL] Inner Join Anweisung?!
 
Ohne Angabe handelt es sich immer um einen inner join

nachti1505 24. Okt 2008 12:10

Re: [SQL] Inner Join Anweisung?!
 
Zitat:

Zitat von mkinzler
Ohne Angabe handelt es sich immer um einen inner join

So wie oben ist es aber eher ein Kreuzprodukt, welches der DBOptimizer hoffentlich in einen Join auswertet... oder irre ich mich?

DeddyH 24. Okt 2008 12:44

Re: [SQL] Inner Join Anweisung?!
 
Mal anders formatiert:
SQL-Code:
select a.SpielId, pb.Liga,c.Team Heim,d.Team Gast
  from spiele a,Liga b,Teams c,Teams d
where b.LigaId=a.LigaId
and c.TeamID=a.HeimTeamId
and d.TeamID=a.AuswTeamId
In anderer Syntax:
SQL-Code:
select a.SpielId, pb.Liga,c.Team Heim,d.Team Gast
from spiele a
inner join Liga b on b.LigaId=a.LigaId
inner join Teams c on c.TeamID=a.HeimTeamId
inner join Teams d on d.TeamID=a.AuswTeamId


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:11 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz