I am having the following ManyToMany table TEAM_USERS with the below data:
x
TEAM_ID USER_ID
1 10
1 3
1 4
1 11
12 10
12 3
12 4
11 3
11 4
18 10
18 7
18 4
18 11
So, I want to get the TEAM_ID that is having only two user with the USER_ID IN (3, 4), in this case it’s team 11. But I am getting team 1, 11, and 12. And I want only team 11.
I did the following code but I am not getting the expected results
SELECT team_id
FROM team_users
WHERE user_profile_id IN (3 , 4)
GROUP BY team_id
HAVING COUNT(DISTINCT user_profile_id) = 2;
the results for this query is:
TEAM_ID
1
11
12
So, please any help would be really appreciated.
=============== EDIT: The list is unique, and there is no duplicates
Advertisement
Answer
Move the WHERE-condition into conditional aggregation.
As long as the combination team_id/user_profile_id is unique:
select team_id
from team_users
group by team_id
-- exactly those two and no other
having sum(case when user_profile_id in (3, 4) then 1 else -1 end) = 2