为不在关系中的人制定查询

时间:2016-01-27 11:09:24

标签: sql mysqli

我有一个模型,用户可以玩多个游戏(多对多)和每个用户 可以在一个或多个团队中(多对多)。每个团队都与特定游戏相关联。

我想提取当前不在特定团队中的特定游戏的所有人。谁不在团队2中,可以玩第5场比赛

该模型看起来像......

Player
    id

Player_Game
    player_id
    game_id

Game
    game_id

Team
    id
    game_id

Team_Player
    team_id
    player_id

我现在已经玩了几天的SQL,并没有快速到达任何地方。 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

使用您给出的示例,您可以使用以下语句;

SELECT 
    p.id
,   pg.game_id
,   tp.team_id 
FROM Player p
INNER JOIN
    Player_Game pg
    ON p.id = pg.player_id
INNER JOIN
    Team_Player tp
    ON p.id = tp.player_id
WHERE tp.team_id != 2 --!= donates not equal to change the team ID to strip out teams out of your search
AND pg.game_id IS NULL --if the player is not in a game then this value will not be set

我对你的模型做了一些假设,所以如果一个人不在游戏中,那么游戏id值将为NULL。如果这不正确,那么我的解决方案将无效

上述声明将返回团队ID不是2的所有玩家。

希望这有帮助:)

答案 1 :(得分:0)

尝试:

Select P.id, T.team_id from
Player P 
left outer join Team_Player T on T.player_id=P.id
inner join Player_Game G on G.player_id=P.id
where T.team_id<>2 and G.game_id=5

您可以从这里了解内部联接:http://www.w3resource.com/mysql/advance-query-in-mysql/inner-join-with-multiple-tables.php 和来自这里的外连接: http://www.w3resource.com/mysql/advance-query-in-mysql/left-join.php