2013-08-06 57 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

你的答案帮助我解决了我的问题,唯一剩下的就是检查我是否有一切工作。 谢谢。 –