Untuk mendapatkan hanya 13 dan 15, lakukan hal berikut:
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
Ini memeriksa apakah 13 dan 15 ada di set user_id. Kemudian memeriksa bahwa tidak ada yang lain di set.
Saya menyadari bahwa menggunakan klausa memiliki dengan pernyataan kasus tampak canggung pada awalnya. Namun, Anda dapat mengekspresikan banyak logika tentang berbagai kombinasi hal di set.