Pour les données de test dans [tblRoleGrps]
Role Grps
----- ----
Role1 GrpA
Role1 GrpB
Role1 GrpC
Role2 GrpA
Role2 GrpB
Role3 GrpA
Role3 GrpD
et [tblUsrGrps]
Usr Grps
----- ----
User1 GrpA
User1 GrpB
User2 GrpA
User2 GrpB
User2 GrpC
User3 GrpA
User3 GrpD
User4 GrpD
nous pouvons créer une requête enregistrée dans Access nommé [qryRoleGrpCounts] qui nous donne le nombre de groupes qui appartiennent à chaque rôle
SELECT Role, COUNT(*) AS GrpCount
FROM tblRoleGrps
GROUP BY Role
retour
Role GrpCount
----- --------
Role1 3
Role2 2
Role3 2
Nous pouvons faire la même chose pour les utilisateurs avec une requête enregistrée nommée [qryUsrGrpCounts]
SELECT Usr, COUNT(*) AS GrpCount
FROM tblUsrGrps
GROUP BY Usr
retour
Usr GrpCount
----- --------
User1 2
User2 3
User3 2
User4 1
Nous pouvons également créer une requête nommée [qryUsrRoleMatches] qui compte le nombre des correspondances entre les utilisateurs et les rôles auxquels ils appartiennent
SELECT ug.Usr, rg.Role, COUNT(*) AS MatchCount
FROM tblUsrGrps ug INNER JOIN tblRoleGrps rg ON ug.Grps = rg.Grps
GROUP BY ug.Usr, rg.Role
retour
Usr Role MatchCount
----- ----- ----------
User1 Role1 2
User1 Role2 2
User1 Role3 1
User2 Role1 3
User2 Role2 2
User2 Role3 1
User3 Role1 1
User3 Role2 1
User3 Role3 2
User4 Role3 1
Avec ces requêtes enregistrées à notre disposition, nous pouvons construire d'autres requêtes pour trouver des correspondances entre les utilisateurs et les rôles. Par exemple, pour lister les cas où il y a une « correspondance exacte », ce qui signifie ...
Le nombre de correspondances entre un utilisateur et un rôle (qryUserRoleMatches.MatchCount) est précisément le nombre de groupes pour cet utilisateur (qryUsrGrpCounts.GrpCount) et exactement le nombre de groupes pour le rôle correspondant (qryRoleGrpCounts.GrpCount).
...nous pouvons utiliser
SELECT qurm.Usr, qurm.Role
FROM
(
qryUsrRoleMatches qurm
INNER JOIN
qryUsrGrpCounts qugc
ON qurm.Usr = qugc.Usr
AND qurm.MatchCount = qugc.GrpCount
)
INNER JOIN
qryRoleGrpCounts qrgc
ON qurm.Role = qrgc.Role
AND qurm.MatchCount = qrgc.GrpCount
retour
Usr Role
----- -----
User1 Role2
User2 Role1
User3 Role3
Ce qui SGBDR parlons-nous ici? Serveur SQL? –
Je le fais dans MS Access – happyolly
Vous voudrez peut-être le marquer avec 'ms-access', Access prend en charge un sous-ensemble très limité de SQL, donc une solution SQL peut ne pas vous aider beaucoup. –