Ребят, подскажите как создать запрос, чтобы SELECT FROM выбирал не из таблицы, а из UNION трёх запросов.. Поясню:
есть таблица прав доступа к модулю, в ней указаны: пользователь, группа пользователей, роль
есть таблицы: права пользователей, роли..
делаю три запроса для выборки идентификаторов попользователей, соединяю их в единый запрос, в котором содержатся все пользователи, входящие как в группы пользователей, разрешённых для работы с модулем, как в роли, так и сами пользователи, разрешённые для работы с модулем...
данные в этом запросе повторяются, так как один и тот же пользователь может быть и в группе и состоять в какой-нибудь роли, или просто иметь личные права доступа к модулю...
теперь нужно сделать DISTINCT всего запроса, состоящего из этих трёх и отсеять пользователя по его идентификатору и названию модуля, чтобы узнать имеет ли он на этот модуль права и какие...
как получившийся вопрос, состоящий из трёх вложить в FROM основного запроса???
Код:
SELECT DISTINCT pin, employeepin, module,allowload FROM
(
SELECT DISTINCT modulerights.pin, modulerights.employeepin, modules.module, modulerights.allowload
FROM modules INNER JOIN modulerights ON modules.pin = modulerights.modulepin;
UNION
SELECT modulerights.pin, emploeegroups.employeepin, modulerights.modulepin, modulerights.allowload
FROM (groups INNER JOIN modulerights ON groups.pin = modulerights.employeegrouppin) INNER JOIN emploeegroups ON groups.pin = emploeegroups.grouppin;
UNION
SELECT modulerights.pin, employeeroles.employeepin, modules.module, modulerights.allowload
FROM (roles INNER JOIN (modules INNER JOIN modulerights ON modules.pin = modulerights.modulepin) ON roles.pin = modulerights.rolepin) INNER JOIN employeeroles ON roles.pin = employeeroles.rolepin)
)
WHERE employeepin=1, module='AddCompany'