SQL - 不知道如何连接三个表
SQL - Can't figure out how to join three tables
我有四个这样的table:
**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
每个用户都有一个队伍,有队形和队名。 "active players" tables 引用 player_ID
和 team_ID
以查看哪些球员目前在哪些球队中活跃。
假设user1
登录到应用程序,那么我想获取所有玩家name
、rating
和他们的cardview_ID
。应该看起来像这样的东西:
_____________________________
name rating cardview_ID
-----------------------------
Hazard 90 7
Messi 94 3
这些是 user1's
球队 team1
当前活跃的球员。
我怎样才能加入这个table?我试过使用 inner join
但这似乎对我不起作用。
_______________________________ 编辑_____________________________________
这是没有给出所需结果的查询:
SELECT players.name, players.rating, activeplayers.cardview_ID
FROM players
INNER JOIN
activeplayers
ON players.player_ID = usedplayers.player_ID
我也尝试在 team_ID 上加入他们。
假设您有可用的登录用户 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>
另请注意要求澄清细节的问题,如果此查询对您有所帮助但您需要更多信息,也请随时回复。尖括号中的内容当然是占位符。我也不知道您的确切 table 名称,因此您可能需要将方括号中的内容替换为实际的 table 名称。
假设您 post 中的查询包含拼写错误,实际上是这样的:
SELECT players.name, players.rating, activeplayers.cardview_ID
FROM players
INNER JOIN
activeplayers
ON players.player_ID = activeplayers.player_ID
此查询将正确 return 所有活跃玩家。现在要将其限制为 User1 的团队,您需要向 Teams
table 添加一个额外的联接,方法与上面的联接相同,然后添加一个 WHERE 子句以过滤 Teams.UserID
.
就是这样。
我有四个这样的table:
**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
每个用户都有一个队伍,有队形和队名。 "active players" tables 引用 player_ID
和 team_ID
以查看哪些球员目前在哪些球队中活跃。
假设user1
登录到应用程序,那么我想获取所有玩家name
、rating
和他们的cardview_ID
。应该看起来像这样的东西:
_____________________________
name rating cardview_ID
-----------------------------
Hazard 90 7
Messi 94 3
这些是 user1's
球队 team1
当前活跃的球员。
我怎样才能加入这个table?我试过使用 inner join
但这似乎对我不起作用。
_______________________________ 编辑_____________________________________
这是没有给出所需结果的查询:
SELECT players.name, players.rating, activeplayers.cardview_ID
FROM players
INNER JOIN
activeplayers
ON players.player_ID = usedplayers.player_ID
我也尝试在 team_ID 上加入他们。
假设您有可用的登录用户 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>
另请注意要求澄清细节的问题,如果此查询对您有所帮助但您需要更多信息,也请随时回复。尖括号中的内容当然是占位符。我也不知道您的确切 table 名称,因此您可能需要将方括号中的内容替换为实际的 table 名称。
假设您 post 中的查询包含拼写错误,实际上是这样的:
SELECT players.name, players.rating, activeplayers.cardview_ID
FROM players
INNER JOIN
activeplayers
ON players.player_ID = activeplayers.player_ID
此查询将正确 return 所有活跃玩家。现在要将其限制为 User1 的团队,您需要向 Teams
table 添加一个额外的联接,方法与上面的联接相同,然后添加一个 WHERE 子句以过滤 Teams.UserID
.
就是这样。