MySQL Select 基于多个连接的语句

MySQL Select statement based on multiple joins

我有一个 select statement 需要我 join 多个 tables(4 tables)。

我的 table 如下:

  1. 团队

  1. Team_User

  1. Tournament_User

  1. 锦标赛

我需要从 certain tournament 获取 teams。我的逻辑是:

Tournament_User table 中我可以找到 userstournament 中。在 Team_User 中,我可以找到 team.

中的 users

为了获得某个锦标赛的球队,我尝试了以下 query

SELECT t.id FROM Teams t
JOIN Team_User tu on tu.team_id = t.id
JOIN Tournament_User tru on tru.user_id = tu.user_id
JOIN Tournaments tr on tr.id = tru.tournament_id
WHERE tr.id = "tournamentId";

它让我 correct teams,但它 duplicates 他们。

我还添加了 DISTINCT,它让我找到了正确的团队并且没有重复它们,但我想知道我是否可以仅使用 joins 而不使用 DISTINCT 来按预期检索记录.

此外,我的记录不能包含重复项并且没有重复项,我以某种方式设法根据我的查询使它们重复。

我假设您的架构中有一个用户 table。团队和用户之间存在 many-to-many 关系,用户与锦标赛之间也存在 many-to-many 关系。这意味着每个锦标赛都将与许多用户相关,这反过来意味着即使所有用户都来自同一个团队,您的查询结果中每个团队的次数也将与给定锦标赛中来自该团队的用户的次数一样多。这些 table 之间关系的性质要求您使用 DISTINCT。