Ik zit al een tijdje na te denken hoe ik volgende query het beste kan uitvoeren in T-SQL.
Situatie
Tabel A bevat de naam van rollen met daaraan gekoppeld de entitlements binnen een applicatie. De data is als volgt gestructureerd:
Tabel B bevat de gebruikers met daaraan gekoppeld de entitlements die men heeft binnen de applicatie.
Ik ben op zoek naar het volgend resultaat:
Er mag dus enkel een resultaat komen als een Gebruiker alle Entitlements heeft die bij een rol horen. Met mijn kennis kom ik niet verder dan een simpele JOIN en dus foutieve resultaten omdat bepaalde entitlements bij verschillende rollen horen. Ik dacht ook al aan het tellen of ik evenveel matchen had als er bij de rol horen maar dan ben ik de entitlements per rol manueel aan het specifiëren en dat is niet werkbaar.
Bijvoorbeeld:
Ik zou graag meer inzet kunnen laten zien maar na uren nadenken blijken mijn T-SQL skills gewoon tekort te schieten en de juiste google termen lijk ik ook niet te vinden
Kan er iemand mij op het goede pad zertten? Al is het maar met de juiste termen
Situatie
Tabel A bevat de naam van rollen met daaraan gekoppeld de entitlements binnen een applicatie. De data is als volgt gestructureerd:
Rol | Entitlement |
Beheerder | OpenApplication |
Beheerder | DoMagic |
Beheerder | DeleteStuff |
Gebruiker | OpenApplication |
Gebruiker | DoNormalStuff |
Tabel B bevat de gebruikers met daaraan gekoppeld de entitlements die men heeft binnen de applicatie.
Gebruiker | Entitlement |
Manager1 | OpenApplication |
Manager1 | DoMagic |
Manager1 | DeleteStuff |
User1 | OpenApplication |
User1 | DoNormalStuff |
Ik ben op zoek naar het volgend resultaat:
Gebruiker | Rol |
Manager1 | Beheerder |
User1 | Gebruiker |
Er mag dus enkel een resultaat komen als een Gebruiker alle Entitlements heeft die bij een rol horen. Met mijn kennis kom ik niet verder dan een simpele JOIN en dus foutieve resultaten omdat bepaalde entitlements bij verschillende rollen horen. Ik dacht ook al aan het tellen of ik evenveel matchen had als er bij de rol horen maar dan ben ik de entitlements per rol manueel aan het specifiëren en dat is niet werkbaar.
Bijvoorbeeld:
code:
1
2
3
4
5
| SELECT B.Gebruiker, A.Rol FROM A JOIN B ON A.Entitlement = B.Entitlement WHERE A.Entitlement IN ('OpenApplication', 'DoNormalStuff') HAVING COUNT(B.Gebruiker) = 2 |
Ik zou graag meer inzet kunnen laten zien maar na uren nadenken blijken mijn T-SQL skills gewoon tekort te schieten en de juiste google termen lijk ik ook niet te vinden

[ Voor 6% gewijzigd door Admiral Freebee op 14-10-2022 22:28 ]