过滤SQL INNER JOIN以获得更多RS结果(用户可以拥有更多角色)

时间:2016-12-21 13:42:21

标签: sql rdbms

我对SQL有疑问。 以下内容:

我有2个表,一个用户和一个角色表。 用户可以拥有多个角色。默认用户只有一个角色(id = 1),admin 2(id = 1& 2)。

现在我想只返回没有拥有admin-role(id = 2)的用户。但是根据我当前的查询,我收到了所有用户,因为管理员也拥有roleID 1(默认用户)。

所以我希望任何人都能解决我的问题。

我当前的查询:

SELECT * FROM (SELECT u.userID AS uID, u.firstName, u.lastName, r.roleID AS rID 
FROM User AS u INNER JOIN roleUser AS ru INNER JOIN Role AS r) 
WHERE rID = 1 //--> dont know to handle this..

1 个答案:

答案 0 :(得分:3)

获取没有关联管理员角色的所有用户

试试这个:

SELECT * FROM Users u
WHERE NOT EXISTS(
    SELECT 'ADMIN'
    FROM RoleUser ru
    WHERE ru.rID = 2
   AND ru.userID = u.userID)

如果你想讨论Role表:

SELECT * FROM Users u
WHERE NOT EXISTS(
    SELECT 'ADMIN'
    FROM RoleUser ru
    JOIN Role r
        ON r.roleID = ru.roleID
    WHERE r.name = 'ADMIN'
   AND ru.userID = u.userID)