1

我有一个问题,我找不到很好的解决方案。

我有Groups_Members包含列GroupId和的关系表MemberId

我有一个存储过程,它创建一个新组并接收一个数组memberId作为参数(用户定义的类型)。我想要的是确保数据库中没有具有完全相同成员的组。

我试图弄清楚EXCEPT操作员如何帮助我,但我做不到。我需要返回具有与我的参数中的成员完全相同的成员集的组的条件memberId(如果该组不存在,则返回 null 或 0)。

任何帮助将不胜感激!

谢谢!

4

2 回答 2

2

表组_成员

组 ID|成员 ID
   1 | 1
   1 | 2
   1 | 3
   2 | 1
   2 | 2
   2 | 4
   3 | 1
   3 | 3
   3 | 4
Declare @Members table(id int)
insert into @Members
values(1), (3), (4)

Declare @MemberCount int
Select @MemberCount = count(id) From @Members

Select GroupId from 
(Select distinct groupId, memberid from Groups_Members) gm
Inner Join @Members On MemberId = id
group by GroupId
Having COUNT(MemberId) = @MemberCount

结果将是 3

可按需提供说明。

于 2013-11-07T08:14:37.590 回答
1
Declare @Members table(id int)
insert into @Members
values(1), (3), (4)

Declare @MemberCount int
Select @MemberCount = count(id) From @Members

--Select GroupId from 
--(Select distinct groupId, memberid from Groups_Members) gm
--Inner Join @Members On MemberId = id
--group by GroupId
--Having COUNT(MemberId) = @MemberCount

当值(1),(3),(4)(它工作正常)。

但是当 values(1), (2) (它不能正常工作)。

不错的尝试,但它不提供与组成员的精确匹配。

试试这个以获得更好的解决方案

Select Gm.GroupId from 
(Select distinct  GroupId, memberid from Groups_Members) gm
Inner Join @Members On MemberId = id
Inner join (Select COUNT(MemberId) as Totalmember,GroupId 
from Groups_Members group by GroupId) tgm on tgm.GroupId = gm.GroupId
where Totalmember = @MemberCount
group by gm.GroupId
Having COUNT(MemberId) = @MemberCount

可按需提供说明。

于 2013-11-08T08:07:37.250 回答