我有3对多对多的表。任何用户都可以拥有多个角色,我不想显示具有角色='管理员的用户,问题是,如果它有多个角色,则会显示。
[User] [Role] [UserRole]
UserId RoleId UserId
FirstName RoleName RoleId
LastName
是的,我没有这个查询SELECT FirstName, LastName, RoleName FROM User JOIN UserRole ON UserRole.UserId = User.UserId JOIN Role ON Role.RoleId = UserRole.RoleId WHERE RoleName != 'Admin'
实施例: 用户 A 的角色为管理员和经理,我的查询会显示经理,但我不想显示任何有角色的用户的管理
答案 0 :(得分:3)
您可以使用子选择来执行此操作:
SELECT FirstName, LastName, RoleName
FROM User
INNER JOIN UserRole
ON UserRole.UserId = User.UserId
INNER JOIN Role
ON Role.RoleId = UserRole.RoleId
WHERE User.UserId NOT IN
(SELECT UserId
FROM UserRole AS ur
WHERE ur.RoleId = (SELECT RoleId FROM Role AS rn WHERE rn.RoleName = 'Admin')
)