J'ai un problème que je ne peux pas find une bonne solution pour.
J'ai une table relationnelle Groups_Members
avec les colonnes GroupId
et MemberId
.
J'ai une procédure stockée qui crée un nouveau groupe et reçoit un tableau de memberId
comme paramètre (type défini par l'user). Ce que je veux, c'est m'assurer qu'il n'y a pas déjà un groupe avec exactement les mêmes membres dans la database.
J'essaie de comprendre comment l'opérateur EXCEPT
pourrait m'aider mais je ne peux pas. J'ai besoin d'une condition qui returnnerait le groupe qui a exactement le même set de membres que ceux de mon paramètre memberId
(ou null ou 0 si un tel groupe n'existe pas).
Toute aide serait très appréciée!
Merci!
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
Lorsque les valeurs (1), (3), (4) (cela fonctionne correctement).
Mais quand les valeurs (1), (2) (cela ne fonctionne pas correctement).
Bien essayé mais il ne fournit pas la correspondance exacte avec les membres du groupe.
Essayez ceci pour une meilleure solution
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
La description peut être fournie sur request.
Table Groups_Members
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
Le résultat serait 3
La description peut être fournie sur request.