2013-08-06 59 views
6

我有3個外鍵彼此的表。 我想編寫一個SQL Server存儲過程從其中一個選擇記錄。從3個帶有外鍵的表中選擇查詢

My tables

現在,讓我們假設,我想所有的獲獎者記錄,指的是指與ID = 2的遊戲玩家記錄,我怎麼能繼續嗎?

謝謝。

+2

你會申請一個INNER具有濾波where子句JOIN; http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html –

回答

6

您指定所有的獲獎者記錄所以,我已經使用了左連接的播放器和遊戲。但總體代碼根據哪裏條件工作。

試試這個,

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

也可以工作,我只是試過了,一切都很好。謝謝! –

+0

非常感謝您的評論。 – Selva

+0

@Selva可以請你告訴我如何執行與Group By相同的操作,比如選擇所有遊戲的所有最新獲勝者記錄。 – Avi

2

您需要使用SELECTINNER JOIN,然後在GameID 2上過濾,您可以使用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

當我這樣做我的方法返回一個列表(贏家記錄類調用存儲過程)我得到:System.IndexOutOfRangeException:ID_player –

+0

@SlimaneAgouram - 這是一個不同的問題。你應該在這裏接受一個答案(如果它幫助你解決了原始問題),然後發佈一個新問題以及你的問題的細節,以及導致異常的代碼片段。 –

+1

你的答案幫助我解決了我的問題,唯一剩下的就是檢查我是否有一切工作。 謝謝。 –