Để nhận được chỉ 13 và 15, hãy làm như sau:
select user_id
from my_table
group by user_id
having max(case when role_id = 13 then 1 else 0 end) = 1 and -- has 13
max(case when role_id = 15 then 1 else 0 end) = 1 and -- has 15
max(case when role_id not in (13, 15) then 1 else 0 end) = 0 -- nothing else
Điều này kiểm tra xem 13 và 15 có nằm trong nhóm user_id hay không. Sau đó, nó sẽ kiểm tra xem không có gì khác trong tập hợp.
Tôi nhận thấy rằng việc sử dụng mệnh đề có với câu lệnh trường hợp lúc đầu có vẻ khó xử. Tuy nhiên, bạn có thể diễn đạt rất nhiều logic về các kết hợp khác nhau của các thứ trong tập hợp.