Aby otrzymać tylko 13 i 15, wykonaj następujące czynności:
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
Sprawdza to, czy 13 i 15 znajdują się w zestawie user_id. Następnie sprawdza, czy w zestawie nie ma nic więcej.
Zdaję sobie sprawę, że użycie klauzuli posiadającej w instrukcji case wydaje się początkowo niezręczne. Możesz jednak wyrazić wiele logiki na temat różnych kombinacji elementów w zestawie.