Запрос Sql для трех таблиц проверяет любую из таблиц
У меня есть 3 таблицы 1: Сотрудник 2: Отдел 3: Эксперты
Я хочу, чтобы эксперты, принадлежащие CmpId = 1
Наемный рабочий :
id CmpId 1 2 2 1 3 1
отдел
id CmpId 1 1 2 2 3 2
Эксперты:
id EmployeeId DepartmentId 1 1 2 2 2 null 3 null 1 4 2 1 5 null null
Позвольте мне предположить, что NULL
в таблице expert
означает, что кто-то является экспертом для всех отделов. Если так:
select e.employeeid from experts e join departments d on e.departmentid = d.id or e.departmentid is null;
Если я правильно понял вопрос, желаемые результаты, основанные на данных выборки, должны быть идентификаторами экспертов 2,3 и 4.
У идентификатора эксперта 2 есть идентификатор сотрудника 2, у которого есть CmpID 1. Идентификатор эксперта 3 имеет идентификатор отдела 1, у которого есть код CmpID 1. Идентификатор эксперта 4 имеет идентификатор сотрудника 2, у которого есть CmpID 1 и идентификатор отдела 1, который имеет CmpID 1.
Если это действительно желаемый набор результатов, я бы написал следующий запрос.
SELECT ex.id, ex.EmployeeID, ex.DepartmentID FROM @Experts ex LEFT JOIN @Department dep ON ex.DepartmentID = dep.id LEFT JOIN @Employee emp ON ex.EmployeeID = emp.id WHERE dep.CmpID = 1 OR emp.CmpID = 1
Это даст следующие результаты.
id EmployeeID DepartmentID 2 2 NULL 3 NULL 1 4 2 1
INNER Присоединяйтесь к трем столам
Если им нужно быть CmpId = 1 в BOTH (это ничего не возвращает в ваших данных образца, но при условии, что это больший набор данных)
SELECT e.id, e.EmployeeId, e.DepartmentId FROM Experts e FULL OUTER JOIN Department d ON e.DepartmentId = d.id FULL OUTER JOIN Employee em ON e.EmployeeId = em.id WHERE d.CmpId = 1 AND em.CmpId = 1
Если им нужно быть CmpId = 1 в Либе
SELECT e.id, e.EmployeeId, e.DepartmentId FROM Experts e FULL OUTER JOIN Department d ON e.DepartmentId = d.id FULL OUTER JOIN Employee em ON e.EmployeeId = em.id WHERE d.CmpId = 1 OR em.CmpId = 1