SQL - 无法弄清楚如何连接三个表

时间:2017-08-29 18:35:53

标签: mysql sql join inner-join jointable

我有四张这样的表:

       **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,但似乎没有为我做这项工作。

_______________________________编辑_____________________________________

这是一个没有给出所需结果的查询:

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

我还尝试在team_ID上加入他们。

2 个答案:

答案 0 :(得分: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 :(得分:2)

假设帖子中的查询包含拼写错误,实际上就是这样:

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

此查询将正确返回所有活跃玩家的玩家。现在只将其限制为User1的团队,您需要向Teams表添加一个额外的连接,就像上面的连接一样,然后添加一个过滤Teams.UserID的WHERE子句

就是这样。