mysql 读多个表 如何快_复杂的MySQL查询与多个表(阅读更多细节)

我有4个表格:团队,用户,用户团队和权限:

用户:

UserID | Name

------------------------

1 | John

2 | Mike

3 | Tom团队:

TeamID | Name

-------------------------------

1 | FC Barcelona

2 | Real Madrid

3 | Manchester United

4 | Liverpool权限:

PermissionsID | Name

-------------------------------

1 | Read Comments

2 | Write Comments

3 | Send Email

4 | AdminUserTeams:

ID | UserID | TeamID | PermissionID

--------------------------------------------

1 | 1 | 1 | 1

2 | 1 | 1 | 2

3 | 1 | 1 | 4

4 | 1 | 2 | 1

4 | 1 | 4 | 3

- H2>

- H2>

UserID = 1(我们知道这在查询之前)

我想让查询得到像这样的东西:

Permission.Name | FC Barcelona | Real Madrid | Manchester United | Liverpool | etc...

----------------------------------------------------------------------------

Read Comments | (something) | (something) | NULL | NULL

Write Comments | (something) | NULL | NULL | NULL

Send Email | NULL | NULL | NULL | (something)

Admin | (something) | NULL | NULL | NULL球队数量不限。

有任何想法吗?如果有多个查询,我不介意...

提前致谢!

仅限首选队伍:

SELECT TeamID, name FROM Teams然后用团队数据创建一个新的查询:

SELECT

Permissions.name as 'permissionName',

MAX(CASE WHEN Teams.name = 'FC Barcelona' THEN Teams.name ELSE NULL END) AS 'FC Barcelona'

FROM Permissions

LEFT JOIN UserTeams ON UserTeams.PermissionID = Permissions.PermissionID AND UserTeams.UserID = '1'

LEFT JOIN Teams ON Teams.TeamID = UserTeams.TeamID

GROUP BY Permissions.name现在我们得到了我们想要的结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值