У меня есть 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
Теперь у нас есть именно тот результат, который мы хотели.