mysql - 具有多个表的复杂 MySQL 查询(阅读更多详细信息)

标签 mysql multiple-tables

我有 4 个表:Teams、Users、UserTeams 和 Permissions:

用户:

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             | Admin

用户团队:

ID | UserID | TeamID | PermissionID
--------------------------------------------
1  | 1      | 1      | 1
2  | 1      | 1      | 2
3  | 1      | 1      | 4
4  | 1      | 2      | 1
4  | 1      | 4      | 3

-

-

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

然后使用 Teams 数据创建一个新查询:

SELECT     
Permissions.name as 'permissionName', 

<Loop this line with the previous query>
    MAX(CASE WHEN Teams.name = 'FC Barcelona' THEN Teams.name ELSE NULL END) AS 'FC Barcelona'
<End loop>

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  

现在我们得到了我们想要的结果。

最佳答案

好吧,我认为您的表格不完整..“(某物)”将存储在哪里

关于mysql - 具有多个表的复杂 MySQL 查询(阅读更多详细信息),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9116704/

相关文章:

php - SQL-更改现有行

php - 为什么 MySQL 以科学计数法返回一些 float ,而不返回其他 float ?

MySQL从多个表中删除,其中键可以在同一个表的不同列中找到

MySQL查询三张表省略列中重复项

mysql - 使用单个csv文件将多个表数据导入mysql

php - 从mysql中的多个表中获取结果

mysql - 我无法从数据库中删除记录

php - 无法回显数据库项目

mysql - 生成等于表中行数的数字列表

SQL - 如果至少有一项交易是今天,则计算交易数量