我有一个问题,我找不到很好的解决方案。
我的关系表Groups_Members
包含GroupId
列和MemberId
。
我有一个存储过程,它创建一个新组并接收一个memberId
数组作为参数(用户定义的类型)。我想要的是确保数据库中没有一个具有完全相同成员的组。
我正在试图找出EXCEPT
运营商如何帮助我,但我不能。我需要条件,它将返回与我的memberId
参数中具有完全相同的成员集的组(如果不存在这样的组,则返回null或0)。
任何帮助都将受到高度赞赏!
谢谢!
答案 0 :(得分:2)
表格组_成员
GroupId|MemberId 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
可根据需要提供说明。
答案 1 :(得分: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)(它正常工作)时。
但是当值(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
可根据需要提供说明。