Home > database >  Select team that consists of members that belong to the same, single department
Select team that consists of members that belong to the same, single department

Time:11-02

I'm trying to make an sql request that turned out surprisingly difficult to me (or maybe this is just the end of the day, sigh).

I have 3 tables:

Team:

id
1
2
3

Team member table:

id team_id
1 1
2 1
3 1
4 1
5 2
6 2
7 2
8 2
9 3
10 3
11 3
12 3

Team member info table:

id team_member_id department_id
1 1 12
3 2 43
5 3 23
7 4 12
9 5 12
11 6 12
13 7 12
15 8 12
17 9 43
19 10 23
21 11 14
23 12 23

These tables are simplified, so don't pay much attention to its structure.

What I need to do is to find ids of teams which consists of members that belong to SINGLE department_id and this department id should be a parameter.

So in our example I need to find teams, which members belong to department 12.

This is team(id=2) since it consists of members id=5,6,7,8 and all of them belong to department 12. Team 1 and Team 3 doesn't suit our needs since its members belong to multiple departments: (12, 43, 23) and (43, 23, 14) respectively.

Thanks a lot!

CodePudding user response:

this query selects the teams whose members belong all to department_id = 12 :

SELECT tm.team_id
  FROM Team_member_info tmi
 INNER JOIN Team_member tm
    ON tm.id = tmi.team_member_id
 GROUP BY tm.team_id
HAVING bool_and(tmi.department_id = 12)

see dbfiddle

CodePudding user response:

This could also be done with other aggregate functions max and min.

Select M.team_id
From Team_Member As M Inner Join Team_Member_Info As I On (M.id=I.team_member_id)
Group by M.team_id
Having Max(I.department_id)=Min(I.department_id)
       And Max(I.department_id)=12;

dbfiddle

  • Related