SQL Statement gesucht: Join über 3 Tabellen

Begonnen von Cheeky, 06 April 2003, 19:23:04

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 1 Gast betrachten dieses Thema.

Cheeky

Hallo!

Ich schreib gerade ein Anmeldesystem, bei dem sich jeweils 2er Teams unter einem Teamnamen und jeweils persönlichen Angaben zur Person zu einer bestimmten Veranstaltung anmelden können...

Dazu die Tables:

person
- personid
- vorname
- nachname
...

team
- teamid
- teamname
...

veranstaltung
- veranstaltungsid
- veranstaltungsname
...

vtp
- vtp_id
- veranstaltungsid
- teamid
- person_1_id
- person_2_id

Soweit so gut... ich möchte nun eine Liste, die so aussieht:
teamname - person1 vorname, nachname - person2 vorname, nachname

Im Prinzip könnte man einzelne Statements verwenden, die immer wieder in einer Schleife aufgerufen werden. Ich möchte das ganze allerdings mit vor/zurückblättern machen, wozu ich eine große temporäre Tabelle benötige...

Momentan bin ich ca. bei dem, was allerdings nicht wirklich hinhaut...

SELECT t.teamname, p1.nachname, p1.vorname, p2.nachname, p2.vorname
FROM team, vtp  
LEFT  JOIN person p1 ON p1.personid = vtp.p1id
LEFT  JOIN person p2 ON p2.personid = vtp.p2id
LEFT JOIN team t ON t.teamid = vtp.tid;

Habt ihr vielleicht eine Idee? Irgendwo hab ich noch einen gewaltigen Denkfehler drin...

Vielen Dank jedenfalls schon im Voraus für Tipps!!!

lg,
Karin

Andi

Hi Cheeky,
ein ähnliches Problem hatte ich auch mal....
Leider ist es in MySql noch nicht möglich mal als 2 Tabellen per join abzufragen.
Sorry, geht nicht. Der umständliche Weg wird Dir nicht erspart bleiben.
schön´s Grüssle, Andi

jubilee

Hallo !
Ich bin mir nicht sicher, ob die Aliase so zulässig sind.
(person p1 ). Auf jeden Fall denke ich, Du brauchst nur die Master-Tabelle
angeben (FROM vtp nicht FROM vtp, team) Wenn Du einen LEFT JOIN
machst ist das eine 1:n Relation. Links der Master rechts die Detailtabelle.
Ich würd einmal so versuchen :
ZitatSELECT teamname, nachname, vorname
FROM vtp
LEFT JOIN person ON personid = vtp.p1id
LEFT JOIN person ON personid = vtp.p2id
LEFT JOIN team ON teamid = vtp.teamid
Alternativ kann man das auch alles mit WHERE-Klauseln schreiben.
Versuch mal und gib einmal Rückmeldung bitte (Entity-Relationship
ist schon lange lange her)
MfG
jubilee

@ Andi : Was nicht mehr als 2 Tabellen über JOIN angeht, bin ich mir auch nicht sicher. Ich finde nirgens eine Einschränkung formuliert. Aber wenn es über WHERE geht, dann sollte es auch über JOIN gehen.




[Editiert am 7/4/2003 von SiteAdmin jubilee]

jubilee

Short round test :
Dieser Query scheint nach (kurzem !!) Test zu gehen :
 
ZitatSELECT teamname, p1.nachname, p1.vorname, p2.vorname, p2.nachname
FROM vtp
LEFT JOIN person p1 ON p1.personid = vtp.p1id
LEFT JOIN person p2 ON p2.personid = vtp.p2id
LEFT JOIN team ON teamid = vtp.teamid
MfG
jubilee
P.S. bitte Rückmeldung interessiert mich jetzt auch  ;)


[Editiert am 7/4/2003 von SiteAdmin jubilee]

Andi

@jubilee  :)  

Mit welcher Datenbank hast Du es getestet?

Mit msAccess z.B. geht das verbinden von xx Tabellen problemlos.
Mit meiner (alten) Mysql Version 3.23.xx hatte es ums verrecken, egal wie, nicht funktioniert. Irgendwo habe ich auch mal was darüber gelesen...
schön´s Grüssle, Andi

jubilee

Humm....
MySQL Version 3.23.54
Macht's  ohne Probleme.
Hab zwar erst bissl rumgewackelt wegen den Aliasen (bin ich von Borland
Interbase Server bissl anders gewohnt) aber geht.
Denke der einzigste Fehler war, das Sie die Detail-Tabelle mit in der
FROM Anweisung stehen hatte. Evt. eine zirkuläre Verbindung weil sie die ja unten nochmal geJOINT hatte ????
MfG
jubilee

[Editiert am 7/4/2003 von SiteAdmin jubilee]

Andi

Hmmm, komisch....
mal testen, habe jetzt auch die 3.23.54 drauf.
Yep, die Aliase schreibt man laut SQL-Standard eigentlich Feldname as   Alias . Mysql nimmt es aber auch so.
schön´s Grüssle, Andi

jubilee

Ja ,
 
ZitatFeldname as Alias  
das kommt mir auch wesentlich bekannter vor.
Aber was solls, wenn's schön macht  :puzz

Cheeky

Danke für die Hilfe!
Hab's inzwischen schon selbst rausgefunden... blöder Denkfehler wie immer *seufz* :) Aba jetzt is es fertig :))

greets,
cheeky