2017-08-29 82 views
0

我有四个表是这样的:SQL - 无法弄清楚如何加入三个表

 **USERS** 
___________________________ 
user_ID username password 
--------------------------- 
1  user1  1234 
2  user2  5678 


       **TEAMS** 
______________________________________ 
team_ID formation team_name user_ID 
-------------------------------------- 
1  4-4-2  team1  1 
2  4-3-3  team2  2 

      **PLAYERS** 
____________________________________  
player_ID name  position rating 
------------------------------------ 
1   Ronaldo LW  94 
2   Messi RW  93 
3   Hazard LW  90 

     **ACTIVE PLAYERS** 
___________________________________ 
ID player_ID team_ID cardview_ID 
----------------------------------- 
1 1   2  9 
2 3   1  7 
3 2   1  3 

每个用户都有一个团队,一个形成和队名。 “活跃球员”表格引用player_IDteam_ID来查看哪些球员目前活跃于哪支球队。

假设user1登录到应用程序,然后我想所有的球员namerating及其cardview_ID。东西应该看上去像这样的:

_____________________________ 
name rating cardview_ID 
----------------------------- 
Hazard 90  7 
Messi 94  3 

这些是目前user1's队是team1活跃的球员。

如何获得此连接表?我曾尝试过inner join,但这似乎并不适合我。

_______________________________ EDIT_____________________________________

这是不给所期望的结果查询:

SELECT players.name, players.rating, activeplayers.cardview_ID 
FROM players 
INNER JOIN 
activeplayers 
ON players.player_ID = usedplayers.player_ID 

我也想加入他们TEAM_ID。

+0

您尝试“加入”的连接方式不正确?加入是正确的解决方案。 –

+0

查询在哪里? – Eric

+0

@TabAlleman你能帮我写出正确的连接吗?当我尝试在team_ID或player_ID上加入他们时,我得到的行数比我想要的要多得多。 – Sumsar9000

回答

2

假设在您的文章中查询包含一个错字,实际上是这样的:

SELECT players.name, players.rating, activeplayers.cardview_ID 
FROM players 
INNER JOIN 
activeplayers 
ON players.player_ID = activeplayers.player_ID 

此查询将返回正确的所有谁是现役球员中的球员。现在要将其仅限制在User1的团队中,您需要按照与上述连接相同的方式向Teams表中添加其他连接,然后添加一个WHERE子句以过滤Teams.UserID

就是这样。

+0

这很好;我的答案提供了一个模型,你将如何实现第三次连接,为user_id添加WHERE子句 – quetzaluz

+0

是的,我注意到了!它完美的作品 – Sumsar9000

3

假设你已经登录的用户的ID可用的,我想这会给你你要问什么:

SELECT 
    [PLAYERS].name, 
    [PLAYERS].rating, 
    [ACTIVE PLAYERS].cardview_ID 
FROM [TEAMS] 
JOIN [ACTIVE PLAYERS] 
ON [TEAMS].team_ID = [ACTIVE PLAYERS].team_id 
JOIN [PLAYERS] 
ON [PLAYERS].player_id = [ACTIVE PLAYERS].player_id 
WHERE [TEAMS].user_id = <logged_in_user_id> 

还请注意要求澄清的细节问题,也随时响应如果这个查询让你成为你的一部分,但你需要更多的信息。尖括号中的内容当然是占位符。我也不知道你的确切表名,所以你可能需要用实际的表名替换方括号中的内容。

+1

谢谢!这工作:) – Sumsar9000

+0

我不知道为什么有人低估了你的问题,因为这个问题绝对有效!快乐编码:) – quetzaluz

+0

也许是因为我没有在开始时发布我的查询。愚蠢的错误。谢谢你的帮助:) – Sumsar9000