我有一个包含 3 个表的多对多关系架构:Users、Teams 和 Teamuser。
由于一个用户可以属于多个团队,并且一个团队可以拥有多个用户,因此 teamuser 是一个将 users.id 与 groups.id 连接起来的表。
我想做一个查询,询问“使用给定的用户 ID,显示团队表中的所有团队,其中包含一个名为“member”的计算字段,如果给定的用户是以下团队的成员,则返回 1该团队,否则为 0"
有没有一种方法可以直接在 MySQL 中通过一个查询来完成此操作?
团队用户:
id teamid userid
5 1 [->] 1 [->]
1 1 [->] 2 [->]
2 2 [->] 2 [->]
6 3 [->] 1 [->]
teamid 是加入 Teams.id 的外键。 userid 是 Users.id 上的外键
团队:
id name
1 Whomping Willows
2 Chudley Cannons
用户:
id username
1 fred
2 finn
3 paul
16 pickles
最佳答案
运行类似下面的代码来获取笛卡尔积,然后将相关的子选择封装在合并中以指示成员身份?
选择u.用户名,t.团队名, COALESCE((从 teamusers itu 中选择 1,其中 itu.teamid = t.teamid 且 itu.userid = u.userid), 0) 来自用户 u、团队 t 其中 u.username = 'finn'
警告,尽管这不会很好地扩展,因为它会从团队用户中为外部笛卡尔积中的每一行进行选择。更多团队==更多行来运行子选择
关于mysql - 基于具有多对连接的子查询返回 Yes/No 的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27625156/