我有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 | Admin
UserTeams:
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
然后使用团队数据创建一个新查询:
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
现在我们得到了我们想要的结果。
答案 0 :(得分:1)
我认为你的表格不完整......将会存储“(某物)”
答案 1 :(得分:0)
查询结果中的列数不可变,您将始终获得相同数量的列。所以我建议像这样的查询结果:
Permission | Team | User_name | User_id
-----------------------------------------------------------------
Read Comments | FC Barcelona | John | 1
Write Comments | Real Madrid | John | 1
Send Email | Manchester United | Mike | 2
Admin | ...(unlimited) | Tom | 2
(当然有正确的值;))
对此的SQL查询是:
SELECT
p.Name AS Permission,
u.Name AS User_name,
t.Name AS Team,
u.id AS User_id
FROM
UserTeams AS ut
INNER JOIN
Users AS u ON (ut.UserId = u.UserId)
INNER JOIN
Teams AS t ON (ut.TeamId = t.TeamId)
INNER JOIN
Permissions AS p ON (ut.PermissionId = p.PermissionsId)
WHERE
u.UserID = :userId