सिर्फ़ पाने के लिए 13 और 15, निम्न कार्य करें:
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
यह जाँचता है कि 13 और 15 user_id सेट में हैं। इसके बाद यह जांचता है कि सेट में और कुछ नहीं है।
मुझे एहसास है कि केस स्टेटमेंट के साथ होने वाले क्लॉज का उपयोग करना पहली बार में अजीब लगता है। हालांकि, आप सेट में चीजों के विभिन्न संयोजनों के बारे में बहुत सारे तर्क व्यक्त कर सकते हैं।