Когда вы говорите:
... был ли разговор между этими точными пользователями ...
Я понимаю, что вы хотите в этом разговоре только этих пользователей и никого больше.
В этом случае просто:
sum(case when user_id in (11, 22, 33) then 1 else 0 end) = 3
не дает правильного результата, потому что он вернул бы все conversation_id
s, где участвуют эти 3 пользователя, но, возможно, с другими.
Вам нужно сравнить с count(*)
:
select conversation_id
from conversation_users
group by conversation_id
having sum(user_id in (11, 22, 33)) = count(*);
Я считаю, что для каждого conversation_id
нет дубликатов user_id
, поэтому count(distinct user_id)
не требуется.
В случае разговора между этими 3 пользователями и, возможно, другими, вы можете использовать предложение where
:
select conversation_id
from conversation_users
where user_id in (11, 22, 33)
group by conversation_id
having count(*) = 3;