Как показать сотрудникам, у которых есть только один проект, а также свой проект. Отношения ко многим со многими - PullRequest
0 голосов
/ 16 апреля 2020

Таблица проекта:

This is Project Table

Таблица сотрудников

This Is Employee Table

Таблица соединителей:

This is many to many connector Table


  1. Есть 6 сотрудников, у которых есть только один проект
  2. один из проектов - P2, у него 5 сотрудников
  3. , а другой проект - P3 который имеет 1 сотрудника

   Select * from Emp
    Select * from Project
    Select * from PrEmpConnector
    ------------------------------------------------
    Select t.EmpId as Employee_Id, t.Project_Name
    from (  
    Select 
    PE.EmpId,
    P.Project_Name
    from PrEmpConnector as PE
    inner join Project as P on P.Id in( 
        Select sum(t.ProjectId)
        from PrEmpConnector as t
        group by t.EmpId
        having COUNT(t.EmpId) = 1
    )
    ) as t
    group by t.Project_Name, t.EmpId
    having t.EmpId in (
        Select t.EmpId
        from PrEmpConnector as t
        group by t.EmpId
        having COUNT(*) = 1
    )

Ответы [ 2 ]

0 голосов
/ 16 апреля 2020

Если вы ищете сотрудников, которые работают только над одним проектом, вы можете объединить три таблицы, агрегировать по сотруднику и отфильтровать группы, содержащие только одну запись с предложением having:

select 
    e.id employee_id, 
    e.name employee_name, 
    min(p.id) project_id, 
    min(p.project_name) project_name
from project p
inner join connector c on c.projectId = p.id
inner join employee e  on e.id = c.employeeId
group by e.id, e.name
having count(*) = 1
0 голосов
/ 16 апреля 2020
select emp.name,emp.surname,project.project_name from 
PrEmpConnector 
inner join emp on emp.id=PrEmpConnector.emp_id
inner join Project on Project.id=PrEmpConnector.projectid
where emp.empid in (
select emp_id from PrEmpConnector
group by emp_id having count(projectid) =1)
...