sql: 2 tabellen team in 1 tabel wedstrijd

Pagina: 1
Acties:

  • Bi3b0b
  • Registratie: Oktober 2006
  • Laatst online: 25-11 11:45
Ik heb 1 tabel met teams in (teamnaam (PK), adres,...) en een tabel wedstrijd (wedstrijdnr, thuisploeg, bezoeker, scorethuisploeg, scorebezoekers,...). Er zijn dus 2 relaties tussen deze tabellen (zowel van teamnaam naar thuisploeg als van teamnaam naar bezoekers).

Nu moet ik van elk team een totaalscore krijgen (door een gewoon select-statement), maar elk team kan zowel soms als thuisploeg als bezoeker aan bon komen in de tabel. Het resultaat mag ook in 2 kolommen komen (dan tel ik het achteraf gewoon op).

Dit was hetgeen ik al had:

SELECT Team.TeamNaam,SUM(Wedstrijd.ScoreThuisPloeg) AS ScoreThuisPloeg,
(SELECT SUM(Wedstrijd.ScoreBezoekers) AS Scorebezoekers
FROM Wedstrijd, Team WHERE Wedstrijd.Bezoekers = Team.TeamNaam) AS ScoreBezoekers
FROM Wedstrijd, Team WHERE Wedstrijd.ThuisPloeg = Team_1.TeamNaam
GROUP BY Team_1.TeamNaam

als uitkomst geeft dit echter:
teamnaam scorethuisploeg scorebezoekers
team1 13 24
team2 2 24
team3 20 24
(scorebezoekers is de som van ALLE scorebezoekers, niet alleen van dat team)

iemand een idee?

  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)


  • Apache
  • Registratie: Juli 2000
  • Laatst online: 18-11 22:50

Apache

amateur software devver

"SELECT t1.TeamNaam thuisploeg, SUM(Wedstrijd.ScoreThuisPloeg) AS ScoreThuisPloeg, SUM(Wedstrijd.ScoreBezoekers) AS ScoreBezoekers, t2.TeamNaam bezoekersploeg
FROM Wedstrijd, Team t1, Team t2 WHERE Wedstrijd.ThuisPloeg = t1.TeamNaam
AND Wedstrijd.Bezoekers = t2.TeamNaam
GROUP BY t1.TeamNaam"

Zult em ook al wel via domi hebben gekregen :)

[ Voor 6% gewijzigd door Apache op 02-05-2007 23:43 ]

If it ain't broken it doesn't have enough features


  • Bi3b0b
  • Registratie: Oktober 2006
  • Laatst online: 25-11 11:45
zo is het niet echt, want met deze select krijg ik:
team1 scorethuisploeg scorebezoekers (van de bezoekers waar team1 thuisploeg was)
........ .......... .............
voor de duidelijkheid: het moet zijn:
team1 scorethuisploeg scorebezoekers (van de bezoekers waar team1 bezoeker was)

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
misschien kun je beter een JOIN gebruiken met aliassen om het wat overzichtelijker te maken?

  • lier
  • Registratie: Januari 2004
  • Laatst online: 01-12 15:17

lier

MikroTik nerd

Beetje wazig verhaal:
Nu moet ik van elk team een totaalscore krijgen (door een gewoon select-statement), maar elk team kan zowel soms als thuisploeg als bezoeker aan bon komen in de tabel. Het resultaat mag ook in 2 kolommen komen (dan tel ik het achteraf gewoon op).
Wil je nu het volgende:

team, doelpunten voor, doelpunten tegen ?

Of moet nog onderscheid gemaakt worden in de doelpunten in een thuis wedstrijd en in een uit wedstrijd ?

[ Voor 13% gewijzigd door lier op 03-05-2007 09:02 ]

Eerst het probleem, dan de oplossing


  • Bi3b0b
  • Registratie: Oktober 2006
  • Laatst online: 25-11 11:45
voor elk team:

teamnaam1 / totaal aantal punten gemaakt als thuisploeg / totaal aantal punten gemaakt als bezoeker
teamnaam2 / totaal aantal punten gemaakt als thuisploeg / totaal aantal punten gemaakt als bezoeker
......

  • lier
  • Registratie: Januari 2004
  • Laatst online: 01-12 15:17

lier

MikroTik nerd

code:
1
2
3
4
5
6
7
SELECT

thuisploeg,
(SELECT SUM (scorethuisploeg) FROM wedstrijd inner1 where inner1.thuisploeg = outerDB.thuisploeg),
(SELECT SUM (scorebezoekers) FROM wedstrijd inner2 where inner2.bezoeker= outerDB.thuisploeg)
FROM wedstijd outerDB
GROUP BY thuisploeg


Een en ander is wel afhankelijk van het DBMS dat je gebruikt...

Aaname: thuisploeg en bezoeker zijn de naam van het team (teamnaam is niet echt een goede PK, veelal wordt hiervoor een technische sleutel gebruikt...)

Eerst het probleem, dan de oplossing


  • Bi3b0b
  • Registratie: Oktober 2006
  • Laatst online: 25-11 11:45
spijtig genoeg besef ik dit maar we zijn verplicht van deze PK te gebruiken.

Deze select heb ik nodig in een dataset => tableadapter query in asp.net, dus ik heb niet veel keuze uit vele andere mogelijke sql-statements.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 07:54

Janoz

Moderator Devschuur®

!litemod

Bi3b0b schreef op woensdag 02 mei 2007 @ 23:56:
voor de duidelijkheid: het moet zijn:
team1 scorethuisploeg scorebezoekers (van de bezoekers waar team1 bezoeker was)
Als je dat wilt moet je niet 2x team met 1x wedstrijden joinen, maar 1x team met 2x wedstrijden joinen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Bi3b0b
  • Registratie: Oktober 2006
  • Laatst online: 25-11 11:45
Hartelijk bedankt, het laatste heeft mij geholpen. het was:

SELECT Team.TeamNaam,
(SELECT SUM(ScoreThuisPloeg) AS Expr1
FROM Wedstrijd AS wedstrijd_1
WHERE (ThuisPloeg = Team.TeamNaam)) AS Expr1,
(SELECT SUM(ScoreBezoekers) AS Expr1
FROM Wedstrijd AS wedstrijd_2
WHERE (Bezoekers = Team.TeamNaam)) AS Expr2
FROM Team CROSS JOIN
Wedstrijd AS Wedstrijd_1 CROSS JOIN
Wedstrijd
WHERE (Team.TeamNaam = Wedstrijd_1.ThuisPloeg) OR
(Team.TeamNaam = Wedstrijd.Bezoekers)
GROUP BY Team.TeamNaam
Pagina: 1