Запрос 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 
Давайте будем гением компьютера.