【发布时间】:2021-01-26 23:27:48
【问题描述】:
试图弄清楚这一点让我头疼!
我有三张桌子 -玩家 -团队 -游戏
具有两列的三个联结表。 -player_teams -teams_games -player_games
我需要列出所有未分配团队(在此游戏中)的游戏中的玩家(例如:变量中的 Game_id = 111)。我称他们为孤儿玩家
基本上得到在比赛中的球队,得到他们的球员并与 Games_players 反向比赛。或者我想反过来。
我试了两天没有运气!
谢谢!
/J p.s 在我发布此内容后,我已经走到了这一步,但它似乎很复杂!
SELECT * from players
JOIN
(SELECT DISTINCT games_players.player_id from games_players
Left JOIN
(Select team_players.player_id p1 from team_players
inner join (Select * from games_teams where games_teams.game_id = :P1) AS tm1 ON team_players.team_id = tm1.team_id) As f1
On games_players.player_id = f1.p1
where p1 is null) as q1
on players.player_id = q1.player_id
【问题讨论】:
-
请表定义、示例输入和预期输出。您可能想要类似
NOT EXISTS查询(您的实际数据库设计存在问题,我相信您已经理解。player_games表可能实际上不应该存在) -
玩家注册玩游戏,支付费用,然后被分配一个团队。他们可以打很多场比赛,每次都在不同的球队。有什么建议么?实际上我认为我解决了它,但并不漂亮
-
我认为您的主要问题是您试图通过连接来解决这个问题。改用
[NOT] EXISTS或[NOT] IN,任务变得容易得多。 -
那么如果玩家可以在逻辑上被分配到没有团队的游戏中,那么
team_players可能应该指代player_games,以便所有连队玩家实际上都在其中游戏 -
谢谢!我会调查的
标签: mysql sql junction-table