Отредактировано, чтобы отказаться от всей моей первой попытки.Это был неправильный ответ.Мой новый ответ:
declare @usersToFind table (userid int)
insert into @usersToFind
select 11
union all select 12
union all select 13
select p.convid, count(*) [participantCount]
from
@participants p
left join @conversations c
on p.convid = c.id
where
p.userid in (select userid from @usersToFind)
group by
p.convid
-- identify all conversation columns you care about here, and repeat them in select clause
having
count(distinct p.userid) >= (select count(*) from @usersToFind)
Проблема заключалась в том, что он не будет принимать список конкретных пользователей для поиска.В этом диалоге можно найти любой разговор, в котором все пользователи (независимо от того, сколько вы указали) являются участниками этого разговора.
Если интересно, вот SQL, который я использовал для настройки моего теста:
declare @conversations table (id int)
declare @participants table (userid int, convid int)
insert into @conversations values (100)
insert into @conversations values (200)
insert into @conversations values (300)
insert into @conversations values (400)
insert into @participants values (11, 100)
insert into @participants values (12, 100)
insert into @participants values (13, 100)
insert into @participants values (11, 200)
insert into @participants values (12, 200)
insert into @participants values (11, 300)
insert into @participants values (13, 300)
insert into @participants values (12, 400)
insert into @participants values (13, 400)
(дополнительно отредактировано для удаления столбца из списка выбора, которого не было в группе, по