Sql query met koppeltabel
Ik ziet hier met een probleem waar ik dus niet uitkom.
Ik heb hier mijn database:
WEDSTRIJD:
WedstrijdID, Datum, Tijd, Veld
1, 2012-05-06, 19:50, 4
ROL (koppeltabel):
WEDSTRIJD_WedstrijdID, TEAM_TeamID, Rol
1, 1, TeamA
1, 2, TeamB
1, 3, Scheids
Team:
TeamID, Clubnaam, Website, Klasse
1, Club a, www.a.nl, 1e klasse
2, Club b, www.b.nl, 1e klasse
3, Club c, www.c.nl, 1e klasse
Nu wat ik uit de database moet krijgen is het volgende overzicht:
W_ID TIJD VELD KLAS TEAM1 TEAM2 SCHEIDS
------------------------------------------------------------------------------------
1 19.50 4 1Klas Club a/Club b Club 3
Ik krijg dit tot zover niet voor elkaar..
Wel met de volgende query kom ik een eind maar niet het gewenste resultaat ik hoop dat iemand mij vooruit kan helpen
SELECT WedstrijdID,
Tijd,
Veld,
Klasse,
T.ClubNaam,
Rol
FROM `wedstrijd` AS W,
`rol` as R,
`team` as T,
`klas` as K
WHERE R.WEDSTRIJD_WedstrijdID = W.WedstrijdID
AND R.TEAM_TeamID = T.TeamID
AND T.KLAS_KlasID = K.KlasID
Bedankt!
Een voorbeldje uit een van mijn projectjes:
match_schedule:
- match_id
- match_date
- match_time
- home_team
- away_team
- home_score
- away_score
teams
- team_id
- team_name
Met deze querie haal ik dan de wedstrijden op:
Ondertussen is het opgelost met de volgende query
SELECT WedstrijdID AS W_ID,
Tijd AS TIJD,
Veld AS VELD,
(SELECT Afkorting FROM `klas` WHERE KlasID IN
(SELECT KLAS_KlasID FROM `team` WHERE TeamID IN
(SELECT TEAM_TeamID FROM `rol` WHERE WEDSTRIJD_WedstrijdID = wedstrijd.WedstrijdID AND Rol = 'TeamA'))) AS KLAS,
(SELECT ClubNaam FROM team WHERE TeamID IN (SELECT TEAM_TeamID FROM rol WHERE WEDSTRIJD_WedstrijdID = wedstrijd.WedstrijdID AND Rol = 'TeamA')) AS TEAM1,
(SELECT ClubNaam FROM team WHERE TeamID IN (SELECT TEAM_TeamID FROM rol WHERE WEDSTRIJD_WedstrijdID = wedstrijd.WedstrijdID AND Rol = 'TeamB')) AS TEAM2,
(SELECT ClubNaam FROM team WHERE TeamID IN (SELECT TEAM_TeamID FROM rol WHERE WEDSTRIJD_WedstrijdID = wedstrijd.WedstrijdID AND Rol = 'Scheidsrechter')) AS `SCHEIDSR-TELLER`
FROM `wedstrijd`
Dan over je query..... dat moet je echt niet zo doen. Dat gaat een echte draak van een query worden die verschrikkelijk langzaam gaat zijn. Als je relaties tussen tabellen legt en daar gegevens uit moet hebben, dan doe je dat over het algemeen met joins. Zie het voorbeeld van Ger. Zoals jij het nu doet betekent het (als ik goed tel) 9 subqueries en als je het over een overzicht hebt van 10 wedstrijden dan zal je 90 subqueries uitvoeren.... dat is werkelijk niet houdbaar.