我有一个问题,我找不到很好的解决方案。
我有Groups_Members
包含列GroupId
和的关系表MemberId
。
我有一个存储过程,它创建一个新组并接收一个数组memberId
作为参数(用户定义的类型)。我想要的是确保数据库中没有具有完全相同成员的组。
我试图弄清楚EXCEPT
操作员如何帮助我,但我做不到。我需要返回具有与我的参数中的成员完全相同的成员集的组的条件memberId
(如果该组不存在,则返回 null 或 0)。
任何帮助将不胜感激!
谢谢!
我有一个问题,我找不到很好的解决方案。
我有Groups_Members
包含列GroupId
和的关系表MemberId
。
我有一个存储过程,它创建一个新组并接收一个数组memberId
作为参数(用户定义的类型)。我想要的是确保数据库中没有具有完全相同成员的组。
我试图弄清楚EXCEPT
操作员如何帮助我,但我做不到。我需要返回具有与我的参数中的成员完全相同的成员集的组的条件memberId
(如果该组不存在,则返回 null 或 0)。
任何帮助将不胜感激!
谢谢!
表组_成员
组 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
可按需提供说明。
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
可按需提供说明。