INTERSECT & EXCEPT

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.