So I have a list of users who every time they have a feature created, a new row with their ID will be created. I would like to exclude all users that have feature B enabled.
USER FEATURE 100 A 100 B 200 A 200 C 200 D
I can’t do select USER from TABLE where FEATURE =! 'B' because that will still show USER 100. Any other solution?
Advertisement
Answer
Assuming all users are in this table, you can use aggregation:
select user from t group by user having sum(case when feature = 'B' then 1 else 0 end) = 0;
If users are actually in another table, I would suggest:
select u.*
from users u
where not exists (select 1
from user_features uf
where uf.user = u.user and uf.feature = 'B'
);