У меня есть сценарий. Можно ли это сделать с помощью одного запроса?
Таблица Company: Информация об одной компании с CPK в качестве первичного ключа и одним менеджером, ведущим, HR, прикрепленным к нему
Таблица «Сотрудники»: для каждой компании есть сотрудники (1 или более может быть до 500) с уникальным empID и менеджером, руководителем, персоналом, прикрепленным к нему
Таблица Информация о сотрудниках (для использования веб-приложения): ему назначается 1 или более Manager, Lead, HR (или может быть ALL, ALL, ALL, что означает, что он может видеть все)
Итак:
Company
--------
CPK (PK)
Manager
Lead
HR
Employees
--------
empID (PK)
CPK (FK)
Manager
Lead
HR
EmployeesInfo
-------------
USER_ID (FK)
Manager
Lead
HR
Web -> Когда пользователь входит в систему, он должен получить всю информацию о компании. Если у него есть доступ к этой компании или любому сотруднику в этой компании, то эта строка включается, если она неактивна (отключена), если "Все", то он можно редактировать каждую запись
Например:
Пользователь1 назначен на Manager1, Lead1 и HR1.
Затем он может редактировать все записи из компании, где менеджер = менеджер1, лидерство = лидерство1 и HR = HR1.
Также записи в компании, в которой есть сотрудники с Company.CPK = Employee.CPK и Employee.Manager = Manager1 и Employee.Lead = Lead1 и Employee.HR = HR1
Мой запрос до сих пор, но
select t2.MANAGER from Employees t2 where t2.CPK = t1.CPK
возвращает несколько записей, что ожидается, что я должен делать ???
SELECT t1.*,
--All condition
CASE WHEN (SELECT MANAGER FROM EmployeesInfo WHERE USER_ID=44) = 'All' then 1
ELSE(
--Check for Company
CASE
WHEN t1.MANAGER in (SELECT MANAGER FROM EmployeesInfo WHERE USER_ID=44) then 1
WHEN t1.LEAD in (SELECT LEAD FROM EmployeesInfo WHERE USER_ID=44) then 1
WHEN t1.HR in (SELECT HR FROM EmployeesInfo WHERE USER_ID=44) then 1
ELSE(
--Check Employee M,L,HR for that Company
CASE
WHEN (SELECT t2.MANAGER FROM Employees t2 WHERE t2.CPK = t1.CPK) in
(SELECT MANAGER FROM EmployeesInfo WHERE USER_ID=44) then 1
WHEN (SELECT t2.LEAD FROM Employees t2 WHERE t2.CPK = t1.CPK ) in
(SELECT LEAD FROM EmployeesInfo WHERE USER_ID=44) then 1
WHEN (SELECT t2.HR FROM Employees t2 WHERE t2.CPK = t1.CPK ) in
(SELECT HR FROM EmployeesInfo WHERE USER_ID=44) then 1
ELSE 0 END
)
END
)
END AS Grey_Out
FROM Company t1
WHERE t1.CPK ='1234'
Наконец, я должен получить все Company с полем grey_out как (1 или 0), затем я буду использовать поле Grey_Out для определения, нужно ли сделать его редактируемым.