2013-08-06 46 views
6

Mam 3 tablice z obcymi klawiszami do siebie. Chcę napisać procedurę składowania programu SQL Server, aby wybrać rekordy z jednego z nich.Wybierz zapytanie z 3 tabel za pomocą obcych kluczy

My tables

Teraz załóżmy, że chcę wszystkie rekordy Winner odnosząc się do zapisów odnoszących się do gracza grę z ID = 2, jak mogę kontynuować?

Dziękuję.

+2

byłoby zastosować INNER JOIN z filtrowaniem gdzie klauzuli; http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html –

Odpowiedz

6

podałeś wszystkie rekordy Winner tak, że mam używany LEFT JOIN dla gracza i gry. Ale ogólny kod działa w zależności od warunku.

Spróbuj to,

select w.* from Winner w 
left Join Player p on p.ID_player = w.player_FK 
left join Game g on g.ID_game = p.Game_FK 
where Game.ID_game = 2 
+0

, który również działa, po prostu próbowałam i wszystko dobrze. Dziękuję! –

+0

serdecznie dziękuję za komentarz. – Selva

+0

@Selva, czy możesz mi powiedzieć, jak wykonać tę samą operację powyżej z Group By, jak wybierz wszystkie najnowsze nagranie zwycięzcy dla wszystkich gier. – Avi

2

Musisz użyć SELECT i INNER JOIN, aby filtrować w GameID 2, możesz użyć klauzuli WHERE.

SELECT ID_Winner, Name, Lastname, Player_FK 
FROM Winner 
INNER JOIN Player on Player.ID_Pplayer = Winner.Player_FK 
INNER JOIN Game ON Game.ID_game = Player.Game_FK 
WHERE Game.ID_game = 2 
+0

kiedy robię to w mojej metodzie, która zwraca listę (klasa rekordów zwycięzcy który wywołuje procedurę przechowywaną) otrzymuję: System.IndexOutOfRangeException: ID_player –

+0

@ SlimaneAgouram - to jest inne pytanie. Powinieneś zaakceptować tutaj odpowiedź (jeśli pomógł ci z pierwotnym problemem), a następnie opublikować nowe pytanie ze szczegółami twojego problemu, a także fragment kodu, który powoduje wyjątek. –

+1

Twoja odpowiedź pomogła mi z moim problemem. Pozostało tylko sprawdzić, czy mam wszystko, co w mojej mocy, aby działało. Dziękuję. –