Per ottenere solo 13 e 15, procedere come segue:
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
Questo controlla che 13 e 15 siano nel set user_id. Quindi controlla che non ci sia nient'altro nel set.
Mi rendo conto che l'utilizzo della clausola having con l'istruzione case all'inizio sembra imbarazzante. Tuttavia, puoi esprimere molta logica su diverse combinazioni di cose nel set.