mysql - 基于具有多对连接的子查询返回 Yes/No 的 SQL 查询

标签 mysql sql join subquery

我有一个包含 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/

相关文章:

mysql - #1054 - 'on clause' 中的未知列

PHP 表单未将所有图像上传到文件夹

PHP 查询执行没有错误,但未发布到 MySQL 服务器

c# - 如何为名称中带有空格的列创建复杂数据类型?

MYSQL INNER JOIN 使用索引很慢

mysql - 多维mysql选择?

php - PRESTASHOP:自动化发货:如何在数据库中插入 SENT 对象?

MySQL 左连接

sql - RoundFunctionSQL 最多到最接近的 10

mysql - 从其他表查询检查状态